|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小天枢 于 2016-1-6 19:44 编辑
#include<stdio.h>
int count = 0;
int Notdanger(int h,int l,int (*num)[8])
{
int i,j,flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0,flag6 = 0;
for (i = 0;i < 8;i ++)
{
if (num[h][i] != 0)
{
flag1 = 1;
break;
}
}
for (i = 0;i < 8;i ++)
{
if (num[i][l] != 0)
{
flag2 = 1;
break;
}
}
for (i = h,j = l;j >= 0 && i >= 0;j --,i --)
{
if (num[i][j] != 0)
{
flag3 = 1;
break;
}
}
for (i = h,j = l;j < 8 && i < 8;i ++,j ++)
{
if (num[i][j] != 0)
{
flag4 = 1;
break;
}
}
for (i = h,j = l;i < 8 && j >= 0;j --,i ++)
{
if (num[i][j] != 0)
{
flag5 = 1;
break;
}
}
for (i = h,j = l;i >= 0 && j < 8;i --,j ++)
{
if (num[i][j] != 0)
{
flag6 = 1;
break;
}
}
if (flag1 || flag2 || flag3 || flag4 || flag5 || flag6)
{
return 0;
}
else
{
return 1;
}
}
void Eight(int h,int l,int (*num)[8])
{
int i,j,num2[8][8];
for (i = 0;i < 8;i ++)
{
for (j = 0;j < 8;j ++)
{
num2[i][j] = num[i][j];
}
}
if (h == 8)
{
printf("%d\n",count +1);
for (i = 0;i < 8;i ++)
{
for (j = 0;j < 8;j ++)
{
printf("%2d",num2[i][j]);
}
puts("");
}
puts("");
count ++;
}
else
{
for (i = 0;i < 8;i ++)
{
if (Notdanger(h,i,num))
{
for (j = 0;j < 8;j ++)
{
num2[h][j] = 0;
}
num2[h][i] = 1;
Eight(h + 1,l,num2);
}
}
}
}
int main(void)
{
int num[8][8],i,j;
for (i = 0;i < 8;i ++)
{
for (j = 0;j < 8;j ++)
{
num[j] = 0;
}
}
Eight(0,8,num);
}
这是对照小甲鱼的视频里面写出来的,为什么在Eight函数的else里的 if (Notdanger(h,i,num))这一段,传进Notdanger函数里判断位置是否合理的是num而不是num2 ?num不都一直是0矩阵吗?[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i] |
|