幫忙看下這個八皇後的錯哪裡了
#include
int nodanger(int row,int n,int (*a)[8])
{
int i;
int k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
//列
5個flag判斷5個方向有沒有危險
for( i=0; i
{
if (*(*(a+i)+n)!=0)
{
flag1=1;
break;
}
}
//左上
for(i=row,k=n;i>0&&k>0;--i,--k)
if (*((*a+i)+k)!=0)
{
flag2=1;
break;
}
//右上
for(i=row,k=n;i0;++i,--k)
if(*(*(a+i)+k)!=0)
{
flag3=1;
break;
}
//左下
for(i=row,k=n;i>0&&k<8;--i,++k)
{
if(*(*(a+i)+k)!=0)
{
flag4=1;
break;
}
}
//右下
for(i=row,k=n;i<8&&k<8;++i,++k)
{
if(*(*(a+i)+k)!=0)
{
flag5=1;
break;
}
} if(flag1==1||flag2==1||flag3==1||flag4==1||flag5==1)
{
return 1;
}
else
{
return 0;
}
}
void eightqueen(int row,int n,int (*a)[8 ] )
{
int b[8][8];
int i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
b[i][j]=a[i][j];
if(8==row)
{
for (i=0;i<8;i++)
for (j=0;j<8;j++)
{
printf ("%d",b[i][j]);
}
printf("\n");
}
else //還沒找完,繼續找
{
for(j=0;j<8;j++)
if(nodanger (row,j,a))//ror行j列有沒有問題
{
for(i=0;i<8;i++)
{
* (*((b+row)+i))=0;
}
((b+row)+j)=1;
eightqueen(row+1,j,a);//繼續下一行
}
}
}
int main()
{
int i,j;
int a[8][8];
for(i=0;i<8;i++)
for(j=0;j<8;j++)
a[i][j]=0;
eightqueen(0,8,a);
return 0;
}
http://wenku.baidu.com/link?url=Nw4pYpRqMupd9Bn3OfkFBoYM6Hhw9TqWvffZHX-GDQYPCTtqo1vABPHZPKyXl-YcG2LOybz798I4i4kP7IUuRyKGL_X2vIDgAH1ftQU6Ygu