您的位置:首页 > 其它

HDU 2553 N皇后问题

2014-03-18 11:23 381 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553

题解:

       经典的八皇后的问题,参考之前写的八皇后就可以解决了。http://blog.csdn.net/mullerwch/article/details/20623937

       然而,这里的注意点是:将N皇后的所有可能性都先求解出来,然后进行题目中的输入输出的解答,否则每次输入都进行一次DFS,结果必然是TLE。

      

这里给出AC的代码,仅供参考:

/*
ID: 2553
Name: N皇后问题
LANG:C++
PREFERENCE: dfs
*/

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;

int queen[15]; //表示第i行皇后的位置
int ans[15]; //N皇后的答案数目

void dfs(int now, int final){
if(now == final){
ans[final]++;
return;
}

int i,j;
for(i=0; i<final; ++i){
queen[now] = i;
bool flag = true;
for(j=0; j<now; ++j)
if(queen[now] == queen[j]||
queen[now]-now == queen[j]-j||
queen[now]+now == queen[j]+j){ //判断是否会相互攻击
flag = false;
break;
}
if(flag)
dfs(now+1, final);
}
return ;
}

int main(){
int i;
int n;
memset(ans, 0, sizeof(ans));
for(i=1; i<=10; ++i){
memset(queen, 0, sizeof(queen));
dfs(0, i);
}

while(scanf("%d", &n), n){
printf("%d\n", ans
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  八皇后 dfs 递归