洛谷八皇后问题
原题链接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;
}
标签:洛谷,int,dfs,问题,num,皇后,include,row
From: https://www.cnblogs.com/2362471311mars/p/18148945