原题链接:https://www.luogu.com.cn/problem/P1219https://www.luogu.com.cn/problem/P1219
题目大意:
给一个 n*n 的方格,放置n个皇后 不能在同一行,不能在同一列,不能在同一对角线或反对角线;
问有多少解法,从第一行开始输出皇后的位置;
若有多种解,只输出前三种;
个人理解:
经典的dfs题目,从第一行开始搜索
直接上代码
#include <bits/stdc++.h>
using namespace std;
const int N=50;
int sum,num;
char a[N][N];
bool line[N],dg[N],udg[N];
int n;
void dfs(int u)
{
if(u==n)
{
if(num!=3)
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]=='1')
{
cout << j+1 << " ";
}
}
}
num++;
puts("");
}
sum++;
// num++;
// puts("");
return;
}
for(int i=0;i<n;i++){
if(!line[i]&&!dg[u+i]&&!udg[n-u+i])
{
a[u][i]='1';
line[i]=dg[u+i]=udg[n-u+i] = true;
dfs(u+1);
line[i]=dg[u+i]=udg[n-u+i] = false;
a[u][i]='0';
}
}
}
int main ()
{
sum=0;num=0;
cin >> n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]='0';
}
}
dfs(0);
cout << sum <<"\n";
return 0;
}
若要输出所有解删除有关num的代码即可;