美文网首页
八皇后问题

八皇后问题

作者: 泡芙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

    相关文章

      网友评论

          本文标题:八皇后问题

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