gascd 发表于 2016-10-1 22:14:57

求助,八皇后问题的代码的问题

求助,这代码为毛错的啊。调试的时候,在notDanger()函数里,row的值居然会减小。
#include <stdio.h>

int num = 0;

int notDanger(int row, int j, int (*chess))
{
    int i, k;
    int flag1=0, flag2=0, flag3=0, flag4=0, flag5=0;

    /// 判断列方向
    for(i=0; i<8; i++)
    {
      if(*(*(chess+i)+j) != 0)
      {
            flag1 = 1;
            break;
      }
    }
    ///判断左上方
    for(i=row, k=j; i>=0 && k>=0; i--, k--)
    {
      if(*(*(chess+i)+k) != 0)
      {
            flag2 = 1;
            break;
      }
    }
    ///判断右上方
    for(i=row, k=j; i<8 && k>=0; i++, k--)
    {
      if(*(*(chess+i)+k) != 0)
      {
            flag3 = 1;
            break;
      }
    }
    ///判断右下方
    for(i=row, k=j; i<8 && k<8; i++, k++)
    {
      if(*(*(chess+i)+k) != 0)
      {
            flag4 = 1;
            break;
      }
    }
    ///判断左下方
    for(i=row, k=j; i>=0 && k<8; i++, k++)
    {
      if(*(*(chess+i)+k) != 0)
      {
            flag5 = 1;
            break;
      }
    }
    if(flag1 || flag2 || flag3 || flag4 || flag5)
    {
      return 0;
    }
    else
    {
      return 1;
    }
}



/// 参数row: 表示起始行
/// 参数n:   表示列数
/// 参数(*chess):表示指向棋盘每一行的指针
void EightQueen(int row, int n, int (*chess))
{
    int chess2, i, j;

    for(i=0; i<8; i++)
    {
      for(j=0; j<8; j++)
      {
            chess2 = chess;
      }
    }

    if(8 == row)
    {
      printf("第%d种解法为:\n", num);
      for(i=0; i<8; i++)
      {
            for(j=0; j<0; j++)
            {
                printf("%d ", chess2);
            }
            printf("\n");
      }
    }
    else
    {
      for(j=0; j<n; j++)
      {
            if(notDanger(row, j, chess2))/// 判断是否有危险
            {
                for(i=0; i<8; i++)
                {
                  *(*(chess2+row)+i) = 0;
                }
                *(*(chess2+row)+j) = 1;
                EightQueen(row+1, n, chess2);
            }
      }


    }
}

int main()
{
    int chess;
    int i, j;

    for(i=0; i<8; i++)
    {
      for(j=0; j<8; j++)
      {
            chess = 0;
      }
    }
    EightQueen(0, 0, chess);
    printf("总共有%d解决方法!\n", num);

    return 0;
}

hanyonstyle 发表于 2017-4-25 15:18:44

if(8 == row)
    {
      printf("第%d种解法为:\n", num);
      for(i=0; i<8; i++)
      {
            for(j=0; j<0; j++)
            {
                printf("%d ", chess2);
            }
            printf("\n");
      }
    }

hanyonstyle 发表于 2017-4-25 15:19:39

楼主这里打错了

EightQueen(0, 0, chess);
    printf("总共有%d解决方法!\n", num);

还有这里

Code_mzh 发表于 2018-1-30 17:27:32

///判断右上方
    for(i=row, k=j; i<8 && k>=0; i++, k--)
    {
      if(*(*(chess+i)+k) != 0)
      {
            flag3 = 1;
            break;
      }
    }
///判断左下方
    for(i=row, k=j; i>=0 && k<8; i++, k++)
    {
      if(*(*(chess+i)+k) != 0)
      {
            flag5 = 1;
            break;
      }
    }
这两段代码时直接复制的吧,这个是错误的
页: [1]
查看完整版本: 求助,八皇后问题的代码的问题