美文网首页
八皇后问题

八皇后问题

作者: 泡芙coder | 来源:发表于2021-04-06 19:30 被阅读0次

1.找出第一种正确摆放方式,也就是深度优先遍历。

inta[8][8] = {0};

intnum=0;

bool check(int x,int y){

    for(inti =0; i

        if(a[x][i] ==1)returnfalse;

        if(x-i-1>=0&&a[x-i-1][y-i-1] ==1)returnfalse;

        if(x+1+i<8&&a[x+1+i][y-1-i] ==1)returnfalse;

    }

    return true;

}

void print(){

    for(inti =0;i<8;++i){

        for(intj =0;j<8;++j){

            printf("%d",a[i][j]);

        }

        printf("\n");

    }

    printf("***********************");

    printf("%d\n",++num);

}

bool queen(int y){

    if(y >=8) {

        print();

        returntrue;

    }

    for(inti =0;i<8;++i){

        for(intx =0;x<8;++x)a[x][y] =0;

        if(check(i, y)){

            a[i][y] =1;

            if(queen(y+1))return true; 

        }

    }

    return false;

}

2.找出全部的正确摆放方式,也就是广度优先遍历。

核心代码变为:

void queen(int y){

    if(y >= 8) {

        print();

        return;

    }

    for(int i = 0;i< 8;++i){

        if(check(i, y)){

            a[i][y] = 1;

            queen(y+1);

            a[i][y] = 0;

        }

    }

参考资料:https://blog.csdn.net/bjweimengshu/article/details/79386101

相关文章

  • 11.数据结构—八皇后问题(回溯法)

    11.1 八皇后问题 八皇后问题是以国际象棋为背景的问题:有八个皇后(可以当成八个棋子),如何在 88 的棋盘中放...

  • 算法(03)回溯

    八皇后问题

  • 八皇后问题(N皇后问题)

    八皇后问题是一个经典的递归回溯问题。 描述 八皇后问题是在一个 8*8 的棋盘上放置皇后,要求其放置后满足同一行,...

  • 八皇后问题

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在...

  • 八皇后问题

    问题的类别是回溯(backtrace). 回溯通常用递归实现。回溯中注意边界问题,避免越界。同时,剪枝可以减少ca...

  • 八皇后问题

    课堂上老师讲了广度优先搜索算法后让课下实现下八皇后问题,就突发奇想了很多实现方法,这里只把我的实现方式和实现代码粘...

  • 八皇后问题

    问题 八皇后问题是一个古老而著名的问题,是试探法的典型例题。该问题由19世纪数学家高斯1850年手工解决。原题为在...

  • 八皇后问题

    采用试探回溯策略,通过栈记录查找结果,实现八皇后问题求解。 测试代码

  • 八皇后问题

    如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任两个皇后都不能处于同一条横行、纵行或斜线上。 先从第一列开...

  • 八皇后问题

    问题描述: 在8x8的网格上,放置皇后两个皇后,两个皇后之间不能在同一行,也不能在同一列,也不能在对角线上。 cl...

网友评论

      本文标题:八皇后问题

      本文链接:https://www.haomeiwen.com/subject/kwrekltx.html