C++的八皇后问题,求纠错

发布时间:2019-07-31 21:49:17

#include<iostream>

using namespace std;

#define max 8

int a[8][2];

bool x[max][max];//建立一个标志值

void dog(int i,int j,int b)

{

    for(int f=0;f<max;f++)

    for(int h=0;h<max;h++)

        if(f+h==i+j) x[f][h]=b;

for(int f=0;f<max;f++)

for(int h=0;h<max;h++)

    if(f-h==i-j) x[f][h]=b;

for(int f=0;f<max;f++)

x[f][j]=b;

for(int f=0;f<max;f++)

x[i][f]=b;

}

void cat(int n,int i,int j)//第n个皇后的位置判断 

{

if(x[i][j]==0)//判断皇后是否安全,如果安全,宣布皇后占领此位置 

{

a[n][0]=i;

a[n][1]=j;//把坐标赋值给皇后

dog(i,j,1);

if(n==8) return ;//八个皇后执行完成,跳出递归

else

    cat(n+1,i,j);//否则执行下一个皇后的程序 

}

else//皇后不安全,将皇后换一个位置,再进行判断 

if(x[i][j]==1)

for(int f=0;f<max;f++)

for(int k=0;k<max;k++)

    if(x[f][k]==0)

        cat(n,f,k);//找到安全点,让皇后进去

    dog(i,j,0);

n--;//返回上一个皇后的程序 

}

int main()

{

cat(0,0,0);

cout<<"满足条件的八个皇后的坐标依次为:"<<endl;

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

cout<<"第"<<i+1<<"个皇后:"<<a[i][0]<<","<<a[i][1]<<endl;

return 0;

}


执行程序时跳进了死循环,应该是回溯部分有问题,求大神纠错。

推荐回答

还没有选出推荐答案,请稍候访问或查看其他回答!
以上问题属网友观点,不代表本站立场,仅供参考!