问题
http://ybt.ssoier.cn:8088/problem_show.php?pid=1213
#include<bits/stdc++.h>
using namespace std;
void dfs(int cur);
const int Maxn=50;
int n;
int vis[3][Maxn];
int pos[Maxn];
int total;
int main()
{
memset(pos,0,sizeof(pos));//初始化数组
memset(vis,0,sizeof(vis));
cin >> n;
dfs(0);
cout << total << endl;
}
void dfs(int cur)//第cur行
{
if(cur==n)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(pos[i]==j)//输出
cout << "X";
else
cout << "O";
if(j==n-1)
cout << endl;
}
}
cout << endl;
total++;
}
else
{
for(int i=0; i<n; i++)
{
if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])//判断
{
pos[cur]=i;//储存这个值
vis[0][i]=1;
vis[1][cur+i]=1;
vis[2][cur-i+n]=1;
dfs(cur+1);//回溯
vis[0][i]=0;
vis[1][cur+i]=0;
vis[2][cur-i+n]=0;
}
}
}
}
参考视频