八皇后问题

2021-04-06  本文已影响0人  泡芙coder

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

上一篇下一篇

猜你喜欢

热点阅读