#include<iostream>
#include<string.h>
#include<string>
#define N 20
using namespace std;
bool vis[3][N];
int sum,a[10];
int n;
void dfs(int cur)
{
if(cur==n){sum++;return;}
for(int i=0;i<n;++i)
if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])
{
a[cur]=i;
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=true;
dfs(cur+1);
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=false;
}
}
int main()
{
while(cin>>n)
{
memset(vis,false,sizeof(vis));
sum=0;
dfs(0);
cout<<sum<<endl;
}return 0;
}回溯法之n皇后问题
最新推荐文章于 2024-01-20 20:51:42 发布
本文介绍了一种使用递归回溯算法解决经典的N皇后问题的方法。通过设置三维布尔数组来记录皇后的位置,算法从第一行开始尝试放置皇后,并在每一步检查是否与已放置的皇后冲突。如果在某一行无法放置皇后,则回溯到上一行进行调整,直到找到一组合法的放置方案或确定无法解题。
553

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



