八皇后问题

857 词

题目描述

经典的八皇后问题,在一个$8*8$的棋盘上放置8个皇后,使得不能互相攻击到,皇后的攻击范围的同一行,同一列以及同一个斜线。要求输出所有不会互相攻击到的摆放方式,所有通过旋转,对称都方式得到的摆放方式均认为是不同的摆放方式。棋盘被编号为$0-7$行,$0-7$列。

输入

无输入。

输出

每行一个数字代表摆放方式,如$01234567$代表从第$0$行放在$0$列,第$1$行放在$1$列,第$2$行放在$2$列,按照升序输出。

题解

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<bits/stdc++.h>
using namespace std;
#define max 8
int queen[max], sum=0;

void show()
{
int i;
for(i = 0; i < max; i++)
{
printf("%d", queen[i]);
}
printf("\n");
sum++;
}

int PLACE(int n)
{
int i;
for(i = 0; i < n; i++)
{
if(queen[i] == queen[n] abs(queen[i] - queen[n]) == (n - i))
{
return 1;
}
}
return 0;
}

void NQUEENS(int n)
{
int i;
for(i = 0; i < max; i++)
{
queen[n] = i;
if(!PLACE(n))
{
if(n == max - 1)
{
show();
}
else
{
NQUEENS(n + 1);
}
}
}
}

int main()
{
NQUEENS(0);
return 0;
}