裸的八皇后问题,DFS,记录全局变量,控制只输出前三个解。
#include <bits/stdc++.h>
using namespace std;
const int N = 15;
char g[N][N];
bool col[N],dg[N * 2],udg[N * 2];//主副对角线,记得开两倍大小
int n;
int res;
void dfs(int u)
{
if(u == n)//已经摆完了所有的皇后
{
res ++;//记录总的方案数
if(res <= 3)
{
for(int i = 0;i < n;i ++)
for(int j = 0;j < n;j ++)
if(g[i][j])
printf("%d ",j + 1);//因为我的下标从0开始,所以+1
puts("");
}
return;
}
for(int i = 0;i < n;i ++)
{
if(!col[i] && !dg[u + i] && !udg[n + u - i])//y = x + b,y = -x + b ------> b = y - x b = y + x;
{
col[i] = dg[u + i] = udg[n + u - i] = true;
g[u][i] = 1;
dfs(u + 1);
col[i] = dg[u + i] = udg[n + u - i] = false;//记得恢复现场
g[u][i] = 0;
}
}
}
int main()
{
cin >> n;
dfs(0);
cout << res << endl;
return 0;
}