您的位置:首页 > 其它

HDU 2553 N皇后问题

2014-05-28 18:33 197 查看
Problem Description

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。

你的任务是,对于给定的N,求出有多少种合法的放置方法。

Input

共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。

Output

共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

Sample Input

1
8
5
0


Sample Output

1
92
10打表,回溯注意理解,第i个皇后在第i行代码太乱,换一个方法,小白的做法
<pre name="code" class="cpp">#include<cstdio>
#include<cstring>
#include<cmath>
int vis[3][50],p[15];
int n,sum;
void dfs(int r)
{
int i;
if(r==n+1)
{
sum++;
return ;
}
for(i=1;i<=n;i++)
{
if(vis[0][r-i+n]==0&&vis[1][i]==0&&vis[2][r+i]==0)
{
vis[0][r-i+n]=1,vis[1][i]=1,vis[2][r+i]=1;
dfs(r+1);
vis[0][r-i+n]=0,vis[1][i]=0,vis[2][r+i]=0;
}
}
}
int main()
{
int i,j;
for(n=1;n<=10;n++)
{
sum=0;
memset(vis,0,sizeof vis);
dfs(1);
p
=sum;
}
while(scanf("%d",&n),n)
{
printf("%d\n",p
);
}
return 0;
}

//点击打开链接


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: