为什么我写的八皇后问题有5242种解法!我看书只有92种解法!
#include<memory.h>
int board[9][9];
int locative[9]={0};//locate[i]表示第i行棋子的位置
int count=0;
void print(int n[])
{
int i=1;
for(;i<9;i++)
printf("%d ",locative[i]);
printf("\n");
}
void trav(int i)//i为递归层数,即皇后摆放在棋盘上的列数,当I大于8时,证明已经按要求摆放好了8列,即得到合法布局
{
if(i>8) {print(locative);count++;return ;}
else for(int j=1;j<9;j++)
{
board[i][j]=1;//在第i行第j列摆放棋子
if(board[i-1][j-1]!=1&&board[i-1][j]!=1&&board[i-1][j+1]!=1)
{
int flag=1;
for(int m=1;m<9;m++)
if(locative[m]==j) {flag=0;break;}//如果第j列已有棋子摆放
if(flag){locative[i]=j;trav(i+1);}//记录位置
}//if
board[i][j]=0;//撤销棋子
locative[i]=0;//撤销位置记录
}
return ;
}
void main()
{
memset(board[0],0,sizeof(board));
trav(1);
printf("总数为%d",count);
}
这是代码,请高手检查一下!看书只有92种解法!