您的位置:首页 > 其它

HDUOJ2553-N皇后问题

2016-03-24 21:33 351 查看
对于N皇后问题首先的代码

#include <stdio.h>

int IsLegal[3][25];
int cnt = 0;
int cmd;

void Dfs(int n)
{
if (n == cmd + 1)
cnt++;
else {
for(int i = 1; i <= cmd; i++) {
if(IsLegal[0][i] == 0 && IsLegal[1][n+i] == 0 && IsLegal[2][n-i+8] == 0) {
IsLegal[0][i] = IsLegal[1][n+i] = IsLegal[2][n-i+8] = 1;
Dfs(n+1);
IsLegal[0][i] = IsLegal[1][n+i] = IsLegal[2][n-i+8] = 0;
}
}
}
}

int main()
{
while (scanf("%d", &cmd) == 1 && cmd) {
Dfs(1);
printf("%d\n", cnt);

cnt = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 25; j++) {
IsLegal[i][j] = 0;
}
}
}

return 0;
}


但是在hduOJ上显示超时,也许是因为计算量太大。由于N <= 10,因此提前将各个答案写入一个表中。

int main()
{
int num[11];
for(n = 1; n <= 10; n++)
{
ans = 0;
dfs(1);
num
= ans;
}
while(scanf("%d",&n) != EOF && n) {
printf("%d\n",num
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: