dfs
作者:
Oct_9
,
2024-04-16 17:59:58
,
所有人可见
,
阅读 11
#include <iostream>
using namespace std;
const int N = 20;
int state[N][N];
int st[N];
int sub[2 * N];
int add[2 * N];
int n;
int dfs(int u)
{
if (u == n + 1)
{
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= n; j ++)
{
if (state[i][j]) printf("Q");
else printf(".");
}
puts("");
}
puts("");
}
// u代表走到哪一层了
for (int j = 1; j <= n; j ++)
{
if (!st[j] && !add[u + j] && !sub[u - j + N]) //看一看哪一个可用
{
st[j] = 1;
add[u + j] = 1;
sub[u - j + N] = 1;
state[u][j] = 1; // 确定可用便更新状态
dfs(u + 1); // 以这一种情况进入下一个状态
state[u][j] = 0; // 当然还有其他选择,得手动把状态改回来,
add[u + j] = 0;
sub[u - j + N] = 0;
st[j] = 0;
}
}
}
int main()
{
scanf("%d", &n);
dfs(1);
return 0;
}