N皇后摆放问题

@[TOC](N皇后摆放问题)

问题描述

每个皇后不同行不同列且不能摆放在同一个相邻斜线上

#include
#include
using namespace std;
int N;
int queenPos[100];//存放k个元素的位置,即行号,k就是列号,
void NQueen(int k);
int main() {
cin >> N;
NQueen(0);
system(“pause”);
return 0;
}
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;//将第k个皇后放在位置i
NQueen(k + 1);//递归下一个
}
}
}

猜你喜欢

转载自blog.csdn.net/weixin_43083491/article/details/95938161