#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
char map[N][N];
bool col[N],gn[N*2],ugn[N*2];//对角线是2倍 有截距表示对角线 y=x+b,则截距为 y-x;y=-x+b,截距为 y+x;
int n;
void dfs(int u){
if(u==n){
for(int i=0;i<n;i++)
puts(map[i]);
puts("");
return;
}
for(int i=0;i<n;i++){
if(!col[i]&&!gn[i+u]&&!ugn[n+i-u]){//i=y,u=x;加n防止出现负数;
map[u][i]='Q';
col[i]=gn[u+i]=ugn[n+i-u]=true;
dfs(u+1);
map[u][i]='.';
col[i]=gn[u+i]=ugn[n+i-u]=false;
}
}
}
int main()
{
scanf("%d", &n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
map[i][j]='.';
}
}
dfs(0);
}
C++ n皇后
最新推荐文章于 2024-10-02 22:25:35 发布
该代码实现了一个C++程序,采用深度优先搜索(DFS)策略来填充一个给定大小的棋盘(n*n)的方格。每个方格可以放置一个皇后,避免同一行、同一列或对角线上有其他皇后。程序通过标记已放置皇后的列、主对角线和副对角线位置来确保无冲突。
摘要由CSDN通过智能技术生成