N皇后问题

本文最后更新于:2023年8月31日 晚上

N皇后问题研究的是如何将 N 个皇后放置在 N×N 的棋盘上,并且使皇后彼此之间不能相互攻击。

递归算法求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream>
#include<cmath>
using namespace std;
char Queenspos[100]={0};//记录皇后的位置
void NQueen( int k, int n)
{
if( k == n) {//n行已经摆好,输出结果
int i;
for (i = 0 ; i < n ;i ++)//输出n皇后的位置
{
cout<<Queenspos[i]+1<< ' ';
}
cout << endl ;
return ;
}
int i;
for( i = 0; i < n ; i ++){//0~k-1行已经摆好,尝试第k行的列位置
int flag = true ;
for ( int j = 0 ; j < k ; j ++) {
if ( Queenspos[j] == i || abs(Queenspos[j] - i) == (abs(k - j)) ) {//不满足条件
flag = false ;
break;
}
}
if( flag ) {
Queenspos[k] = i ;
NQueen( k+1 , n) ;//满足条件,尝试下一行
}
}
}
int main()
{
int n;
cin>>n;//n皇后
NQueen(0 , n);
return 0;
}

N皇后问题
https://furthur509.github.io/2023/08/31/N皇后问题/
作者
Yang Mingxin
发布于
2023年8月31日
许可协议