您的位置:首页 > 其它

hdu2553n皇后问题

2016-10-03 20:55 281 查看
一切尽在代码之中!看懂代码不难的

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;

int n , line[10] , ans , vis[20] , map[20] , p_ans[20];

void dfs(int x)
{
if(x == n + 1){
ans++;
return;
}
for(int i = 1 ; i <= n ; i++){
if(!vis[i]){//hang
int flag = 1;
map[x] = i;//把x列安排在i行里
for(int j = 1 ; j <= x - 1 ; j++){
if(abs(map[x] - map[j]) == abs(x - j)){//一次和前面的进行比较
flag = 0;
break;
}
}
if(flag){
vis[i] = 1;
dfs(x + 1);
vis[i] = 0;
}
}
}
}

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