187手写题解
2025-08-04 20:57:47
发布于:河北
1阅读
0回复
0点赞
#include <iostream>
#include <vector>
using namespace std;
const int N = 20;
int col[40], leftu[40], leftd[40];
int n, cnt;
vector<int> ans;
void dfs(int x)
{
if (x >= n + 1)
{
cnt ++;
if (cnt <= 3)
{
for (int i = 0; i < ans.size(); i ++)
cout << ans[i] << " ";
cout << endl;
}
}
else
{
for (int y = 1; y <= n; y ++)
{
if (!col[y] && !leftu[x - y + 14] && !leftd[x + y])
{
col[y] = leftu[x - y + 14] = leftd[x + y] = 1;
ans.push_back(y);
dfs(x + 1);
col[y] = leftu[x - y + 14] = leftd[x + y] = 0;
ans.pop_back();
}
}
}
}
int main ()
{
cin >> n;
dfs(1);
cout << cnt << endl;
return 0;
}
这里空空如也
有帮助,赞一个