八皇后

来源:互联网 发布:计数型数据过程能力 编辑:程序博客网 时间: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;
}

原创粉丝点击