题目:
#include<iostream>
using namespace std;
const int N = 15;
int n;
char g[N][N];
bool row[N],col[N],dg[N],udg[N];
void dfs(int x,int y,int u)
{
if(y == n)x++,y = 0;//y坐标出界
if(x == n)//dfs退出的条件
{
if(u == n)
{
for(int i = 0;i < n;i++)//输出皇后的位置
{
for(int j = 0;j < n;j++)
{
cout<<g[i][j]<<" ";
}
cout<<endl;
}
return ;
}
}
//不放皇后
dfs(x,y+1,u);
//放皇后
if(!row[x]&&!col[y]&&!dg[x+y]&&!udg[x-y+n])
{
g[x][y] = 'Q';
row[x] = col[y] = dg[x + y] = udg[x-y + n] = true;
dfs(x,y + 1,u + 1);
row[x] = col[y] = dg[x + y] = udg[x-y + n] = false;
g[x][y] = '.';
}
}
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);
return 0;
}