hahahahaen @ 2024-04-08 20:55:09
#include <iostream>
using namespace std;
int ans = 0; int m;
int a[13][13];//a==14表示皇后,0表示可以放,14-n表示此处不能放且来自哪一行
void dfs(int n)
{
if (n==0)
{
ans++;
if (ans == 1 || ans == 2 || ans == 3)
{
for (int i = 13 - m; i < 13; i++)
{
for (int j = 0; j < 13; j++)
{
if (a[i][j] == 14)
{
cout << j + 1 << ' ';
break;
}
}
}
cout << endl;
}//n=0即还有0个皇后要放时,输出前三种可能
}
else
{
for (int i = 0; i < n; i++)
{
if (a[13 - n][i] == 0)//13-n表示行,从13-m到13
{
a[13 - n][i] = 14;
for (int j = 1; j < n; j++)
{
if (a[13 - n + j][i] == 0) {
a[13 - n + j][i] = 14 - n;
}
if (i + j < n&&a[13 - n + j][i + j] == 0 ) {
a[13 - n + j][i + j] = 14 - n;
}
if (i - j >= 0 && a[13 - n + j][i - j] == 0)
{
a[13 - n + j][i - j] = 14 - n;
}
}//如果该在、格前没有被标记,则标记
dfs(n - 1);
a[13 - n][i] = 0;
for (int j = 1; j < n; j++)
{
if (a[13 - n + j][i] == 14 - n) {
a[13 - n + j][i] = 0;
}
if (i + j < n && a[13 - n + j][i + j] == 14 - n) {
a[13 - n + j][i + j] = 0;
}
if (i - j >= 0 && a[13 - n + j][i - j] == 14 - n)
{
a[13 - n + j][i - j] = 0;
}
}//回溯,只回溯由该行标记的、格 以及皇后格
}
}
}
}
int main() {
cin >> m;
memset(a, 0, sizeof(a));
dfs(m);
cout << ans;
return 0;
}
为啥他输出的一直是0啊啊啊啊啊!蒟蒻哭泣:(