洛谷八皇后問題
原題連結https://www.luogu.com.cn/problem/P1219
簡單dfs思路,g[n]儲存的是可以作為選擇的列下標
輸出的時候記著加一(從0開始)
#include <iostream>
#include<cstring>
using namespace std;
const int N=15;
int n;
int num;
bool lie[N],duijiao[2*N],Uduijiao[2*N];
int g[N];
const int maxx=3;
void dfs(int row)//row是行//col是列
{
if(row==n)
{
num++;
if(num>maxx)return ;
for(int i=0;i<n;i++)
{
cout<<g[i]+1<<" ";
}
puts("");
return ;
}
for(int col=0;col<n;col++)
{
if(!lie[col]&&!duijiao[col+row]&&!Uduijiao[n-row+col-1])
{
lie[col]=duijiao[row+col]=Uduijiao[n-row+col-1]=true;
g[row]=col;
dfs(row+1);
lie[col]=duijiao[row+col]=Uduijiao[n-row+col-1]=false;
//g[row]=0;
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)lie[i]=false;
for(int i=0;i<n*2;i++)duijiao[i]=Uduijiao[i]=false;
dfs(0);
cout<<num<<endl;
}