八皇后问题递归解发

来源:互联网 发布:蓝可儿事件知乎 编辑:程序博客网 时间:2024/06/06 19:45
#include <iostream>#include <string>using namespace std;int count=0;//记录总的放法int judge(int i,int j,int a[][8])//冲突检查{ int m,n; for(m=0;m<8;m++)//判断列是否有皇后  if(a[i][m]==1 && m!=j)   return 0; for(m=0;m<8;m++)//判断行是否有皇后  if(a[m][j]==1 && m!=i)   return 0; //判断两条对角线上是否有皇后 for(m=i-1,n=j-1;n>=0 && m>=0;m--,n--) //左上对角线冲突检查  if(a[m][n]==1)   return 0; for(m=i-1,n=j+1;n<8 && m>=0;m--,n++) //右上对角线冲突检查  if(a[m][n]==1)   return 0; for(m=i+1,n=j-1;m<8 && n>=0;m++,n--) //左下对角线冲突检查  if(a[m][n]==1)   return 0; for(m=i+1,n=j+1;m<8 && n<8;m++,n++) //右下对角线冲突检查  if(a[m][n]==1)   return 0; return 1;}void looc(int j,int a[][8]){ int i,k; if( j==8) {  for(i=0;i<8;i++)  {   for(k=0;k<8;k++)    printf("%d ",a[i][k]);   printf("\n");  }  count++;  printf("\n\n");  return; }    for(i=0;i<8;i++) {  if(judge(i,j,a))  {       a[i][j]=1;//符合要求、、、该位置置为1        looc(j+1,a);//对每一列放皇后、、     a[i][j]=0;//回溯  }   }}void main(){ int a[8][8]; for(int i=0;i<8;i++)//二维数组初始化  for(int j=0;j<8;j++)   a[i][j]=0; looc(0,a); printf("%d\n",count);}

0 0
原创粉丝点击