您的位置:首页 > 其它

回溯法解决八皇后问题

2017-02-23 13:07 253 查看
使用二维数组
vis[2][]
直接判断当前尝试的皇后所在的列和两个对角线是否已经有其他皇后。

#include <iostream>
#include<cstdio>
#include<string.h>
#define maxn 20
using namespace std;
int cnt=0;
int vis[3][maxn];
int n;
int aa[maxn];
void search_1(int cur)
{
if(cur==n)
cnt++;
else
{
for(int i=0; i<n; i++)
{
if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
{
aa[cur]=i;
vis[0][i] =vis[1][cur+i] =vis[2][cur-i+n]=1;
search_1(cur+1);
vis[0][i] =vis[1][cur+i] =vis[2][cur-i+n]=0;//回溯!!!
}
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
while(scanf("%d",&n)!=EOF)
{
cnt=0;//每次读入一个n值,需要初始化一下计数器
search_1(0);//从cur=0开始递归
printf("%d\n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  回溯法 八皇后