简单回溯 不再陈述
#include<iostream>
using namespace std;
int number=0;
int n; ////////// n 皇后
int vis[3][100]; ////////三维数组,分别代表-》列-》主对角线-》副对角线
void dfs(int cur)
{
int i,j;
if(cur==n) number++;
else for(i=0;i<n;++i)
{
if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])
{
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;
dfs(cur+1);
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;
}
}
}
int main()
{
while(1)
{cout<<"请输入 n(-1退出):"<<endl;
cin>>n;
if(n==-1) break;
dfs(0);
cout<<"公有解个数:"<<number<<endl;
}
}八皇后
最新推荐文章于 2020-06-21 17:04:46 发布
本文通过使用递归回溯算法解决N皇后问题,并提供了一段C++实现代码。该算法利用三维数组记录列、主对角线及副对角线的状态来避免皇后之间的冲突,最终统计出所有可能的解决方案数量。
399

被折叠的 条评论
为什么被折叠?



