帮忙看下这个八皇后的错哪里了
#include <stdio.h>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<8;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;i<8&&k>0;++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;
}
[ 本帖最后由 NeQhk 于 2015-4-17 19:53 编辑 ]