大佬们帮忙看看n皇后这题,我用dfs暴搜每个格子,为什么会有段错误啊!!!
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 10;
int n;
int row[N],col[N],dg[2*N],udg[2*N]; //0表示没放
char g[N][N]; //棋盘
void dfs(int x,int y,int queen)
{
if (y==n)
{
y=0;
x++;
}
if (x==n)
{
if (queen==n)
{
for (int i = 0; i < n; i ++ ) puts(g[i]);
puts("");
return;
}
}
//分支1,放皇后
if (!row[x] && !col[y] && !dg[x-y+n] && !udg[x+y])
{
row[x]=1;
col[y]=1;
dg[x-y+n]=1;
udg[x+y]=1;
g[x][y]='Q';
dfs(x,y+1,queen+1);
row[x]=0;
col[y]=0;
dg[x-y+n]=0;
udg[x+y]=0;
g[x][y]='.';
}
//分支2,不放皇后
dfs(x,y+1,queen);
return;
}
int main()
{
cin >> n;
//棋盘初始化
for (int i = 0; i < n; i ++ )
for (int j = 0; j < n; j ++ )
g[i][j] = '.';
dfs(0,0,0); //从第0行第0列开始放第0个皇后
return 0;
}