递归处理八皇后问题
本帖最后由 小天枢 于 2016-1-6 19:44 编辑#include<stdio.h>
int count = 0;
int Notdanger(int h,int l,int (*num))
{
int i,j,flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0,flag6 = 0;
for (i = 0;i < 8;i ++)
{
if (num != 0)
{
flag1 = 1;
break;
}
}
for (i = 0;i < 8;i ++)
{
if (num != 0)
{
flag2 = 1;
break;
}
}
for (i = h,j = l;j >= 0 && i >= 0;j --,i --)
{
if (num != 0)
{
flag3 = 1;
break;
}
}
for (i = h,j = l;j < 8 && i < 8;i ++,j ++)
{
if (num != 0)
{
flag4 = 1;
break;
}
}
for (i = h,j = l;i < 8 && j >= 0;j --,i ++)
{
if (num != 0)
{
flag5 = 1;
break;
}
}
for (i = h,j = l;i >= 0 && j < 8;i --,j ++)
{
if (num != 0)
{
flag6 = 1;
break;
}
}
if (flag1 || flag2 || flag3 || flag4 || flag5 || flag6)
{
return 0;
}
else
{
return 1;
}
}
void Eight(int h,int l,int (*num))
{
int i,j,num2;
for (i = 0;i < 8;i ++)
{
for (j = 0;j < 8;j ++)
{
num2 = num;
}
}
if (h == 8)
{
printf("%d\n",count +1);
for (i = 0;i < 8;i ++)
{
for (j = 0;j < 8;j ++)
{
printf("%2d",num2);
}
puts("");
}
puts("");
count ++;
}
else
{
for (i = 0;i < 8;i ++)
{
if (Notdanger(h,i,num))
{
for (j = 0;j < 8;j ++)
{
num2 = 0;
}
num2 = 1;
Eight(h + 1,l,num2);
}
}
}
}
int main(void)
{
int num,i,j;
for (i = 0;i < 8;i ++)
{
for (j = 0;j < 8;j ++)
{
num = 0;
}
}
Eight(0,8,num);
}
这是对照小甲鱼的视频里面写出来的,为什么在Eight函数的else里的 if (Notdanger(h,i,num))这一段,传进Notdanger函数里判断位置是否合理的是num而不是num2 ?num不都一直是0矩阵吗? 求大神解答,想了好久没想出来:mad::mad: 你这代码写得有问题
页:
[1]