n皇后问题
作者:
孔乙己_7
,
2024-03-19 20:33:51
,
所有人可见
,
阅读 7
核心应该是判断棋盘两点共线巧妙方法
#include<iostream>
using namespace std;
const int N = 10000;
int n;
bool col[N],row[N],dg[N],udg[N];
int p[100];
void DFS(int k)
{
if(k==n+1)
{
for (int i = 1; i <= n; i ++ ) printf("%d ",p[i]);
cout<<endl;
return;
}
//遍历列
for(int i=1;i<=n;i++)
{
if(!col[i]&&!dg[k+i]&&!udg[k-i+n])
{
p[k]=i;
col[i]=dg[k+i]=udg[k-i+n]=true;
DFS(k+1);
col[i]=dg[k+i]=udg[k-i+n]=false;
}
}
}
int main()
{
p[0]=1;
cin>>n;
//每次DFS为一行
DFS(1);
return 0;
}