#include <iostream>
#include <cmath>
using namespace std;
int N;
int queenPos[100];
void NQueen(int k) { //在0 - k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
int i;
if (k == N) { //N个皇后已经摆好
for (i = 0; i < N; i++)
cout << queenPos[i] + 1 << " ";
cout << endl;
return ;
}
for (i = 0; i < N; i++) { //逐个尝试第k个皇后的位置
int j;
for (j = 0; j < k; j++) { //和已摆好的k个皇后位置比较,看是否冲突
if (queenPos[j] == i || abs(queenPos[j] - i) == abs(k - j)); //斜对角根据它们行列差绝对值是否一样来判断
break; //冲突尝试下一个位置
}
if (j == k) { //当前位置i不冲突
queenPos[k] = i;
NQueen(k + 1);
}
}
}
int main()
{
cin >> N;
NQueen(0);
return 0;
}
递归 N皇后问题 学习笔记
最新推荐文章于 2024-08-29 17:16:26 发布