发布时间: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;
}
执行程序时跳进了死循环,应该是回溯部分有问题,求大神纠错。