八皇后
来源:互联网 发布:计数型数据过程能力 编辑:程序博客网 时间:2024/04/28 02:11
这个是我们数据结构的一个作业,我用最普通最普通的方法编成~好了~把程序放这了~
#include<iostream.h>
#include <conio.h>
static int Q=8; //皇后数目
int a[50][50]; //棋盘数组
int col[50]; //判断列是否有皇后的数组
int diag[100]; //判断主对角线是否有皇后的数组
int diag2[100]; //盘对从对角线是否有皇后的数组
int count=0; //答案数
void print() //打印棋盘上皇后所处位置
{
for(int k=0;k<Q;k++)
{
for(int g=0;g<Q;g++)
{
cout<<a[k][g];
}
cout<<endl;
}
}
void found(int i) //查找第i个皇后所处位置(从0开始),也即为第i行上皇后能处位置
{
int j;
if(i>Q-1) //皇后已寻找完毕,答案数累加,打印棋盘
{
count++;
cout<<"这是第"<<count<<"个答案"<<endl;
print();
cout<<" "<<endl;
cout<<"输入任意键显示下一个答案"<<endl;
_getche();
}
else
{
for(j=0;j<Q;j++)
{
if(col[j]+diag[i-j+Q-1]+diag2[i+j]==0) //判断皇后所处位置上的列,主对角线,从对角线上是否有皇后
{
a[i][j]=col[j]=diag[i-j+Q-1]=diag2[i+j]=1; //将皇后置于此位置
found(i+1); //查找下一个皇后
a[i][j]=col[j]=diag[i-j+Q-1]=diag2[i+j]=0; //回溯,此时可对皇后的位置进行再寻找
}
}
}
}
void main()
{
for(int m=0;m<Q;m++) //对四个数组进行初始化,均设为0
col[m]=0;
for(m=0;m<Q*2-1;m++)
diag[m]=diag2[m]=0;
for(m=0;m<Q;m++)
for(int n=0;n<Q;n++)
a[m][n]=0;
found(0); //开始递归
cout<<"总答案数"<<count<<endl;
}