小天枢 发表于 2015-12-26 19:21:58

递归处理八皇后问题

本帖最后由 小天枢 于 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矩阵吗?

小天枢 发表于 2015-12-26 19:22:42

求大神解答,想了好久没想出来:mad::mad:

rerwrw 发表于 2016-3-2 23:34:52

你这代码写得有问题
页: [1]
查看完整版本: 递归处理八皇后问题