八皇后问题(回溯法)

曾经终败给现在 2022-06-12 12:07 277阅读 0赞

问题描述:

在8*8的棋盘上,放置8个皇后,使他们互相不攻击;

解析:

进行逐行放置,皇后肯定不会进行横向攻击,因此只需检查纵向和斜向是否会进行攻击即可

代码:

C++ Code











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





#include<bits/stdc++.h>


using 
namespace std;




int Map[
10],n=
8;


int tot;


void print()

{

    
for(
int i=
0;i<n;i++)

    {

        
for(
int j=
0;j<n;j++)

        {

            
if(Map[i]==j)

                printf(
“1 ”);

            
else

                printf(
“0 ”);

        }

        printf(
“\n”);

    }

}




void sear(
int cur)

{

    
if(cur==n)

    {

        tot++;

        print();

    }



    
for(
int i=
0;i<n;i++)

    {

        
int ok=
1;

        Map[cur]=i;  
///尝试把第cur行的皇后放在第i列
        
for(
int j=
0;j<cur;j++)
///检查是否和前面的皇后冲突
        {

            
if(Map[cur]==Map[j]||cur-Map[cur]==j-Map[j]||cur+Map[cur]==j+Map[j])

            {

                ok=
0;

                
break;

            }

        }

        
if(ok==
1)

            sear(cur+
1);

    }

}


int main()

{

    tot=
0;

    sear(
0);

    printf(
“%d\n”,tot);

    
return 
0;

}


发表评论

表情:
评论列表 (有 0 条评论,277人围观)

还没有评论,来说两句吧...

相关阅读

    相关 回溯-N皇后问题

    一、N皇后问题 n皇后问题:要求在一个n×n的棋盘上放置n个皇后,使得任意两个皇后不在同一行或同一列或同一斜线上。 二、回溯法 回溯法是一类非常重要的算法设计方法

    相关 回溯皇后问题

    八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横

    相关 皇后问题(回溯)

    问题描述: 在8\8的棋盘上,放置8个皇后,使他们互相不攻击; 解析: 进行逐行放置,皇后肯定不会进行横向攻击,因此只需检查纵向和斜向是否会进行攻击即可 代码:  C

    相关 皇后问题回溯

    问题描述 ![70][] 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上(与水平行轴成45°或135°),问有多少

    相关 回溯皇后

    回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再

    相关 回溯—— / N 皇后问题

    回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。 回溯法在问题的解空间树中,按深度优先策略,从根结点