鱼C论坛

 找回密码
 立即注册
查看: 3804|回复: 3

[已解决]求助,八皇后问题的代码的问题

[复制链接]
发表于 2016-10-1 22:14:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  2. int num = 0;

  3. int notDanger(int row, int j, int (*chess)[8])
  4. {
  5.     int i, k;
  6.     int flag1=0, flag2=0, flag3=0, flag4=0, flag5=0;

  7.     /// 判断列方向
  8.     for(i=0; i<8; i++)
  9.     {
  10.         if(*(*(chess+i)+j) != 0)
  11.         {
  12.             flag1 = 1;
  13.             break;
  14.         }
  15.     }
  16.     ///判断左上方
  17.     for(i=row, k=j; i>=0 && k>=0; i--, k--)
  18.     {
  19.         if(*(*(chess+i)+k) != 0)
  20.         {
  21.             flag2 = 1;
  22.             break;
  23.         }
  24.     }
  25.     ///判断右上方
  26.     for(i=row, k=j; i<8 && k>=0; i++, k--)
  27.     {
  28.         if(*(*(chess+i)+k) != 0)
  29.         {
  30.             flag3 = 1;
  31.             break;
  32.         }
  33.     }
  34.     ///判断右下方
  35.     for(i=row, k=j; i<8 && k<8; i++, k++)
  36.     {
  37.         if(*(*(chess+i)+k) != 0)
  38.         {
  39.             flag4 = 1;
  40.             break;
  41.         }
  42.     }
  43.     ///判断左下方
  44.     for(i=row, k=j; i>=0 && k<8; i++, k++)
  45.     {
  46.         if(*(*(chess+i)+k) != 0)
  47.         {
  48.             flag5 = 1;
  49.             break;
  50.         }
  51.     }
  52.     if(flag1 || flag2 || flag3 || flag4 || flag5)
  53.     {
  54.         return 0;
  55.     }
  56.     else
  57.     {
  58.         return 1;
  59.     }
  60. }



  61. /// 参数row: 表示起始行
  62. /// 参数n:   表示列数
  63. /// 参数(*chess)[8]:  表示指向棋盘每一行的指针
  64. void EightQueen(int row, int n, int (*chess)[8])
  65. {
  66.     int chess2[8][8], i, j;

  67.     for(i=0; i<8; i++)
  68.     {
  69.         for(j=0; j<8; j++)
  70.         {
  71.             chess2[i][j] = chess[i][j];
  72.         }
  73.     }

  74.     if(8 == row)
  75.     {
  76.         printf("第%d种解法为:\n", num);
  77.         for(i=0; i<8; i++)
  78.         {
  79.             for(j=0; j<0; j++)
  80.             {
  81.                 printf("%d ", chess2[i][j]);
  82.             }
  83.             printf("\n");
  84.         }
  85.     }
  86.     else
  87.     {
  88.         for(j=0; j<n; j++)
  89.         {
  90.             if(notDanger(row, j, chess2))/// 判断是否有危险
  91.             {
  92.                 for(i=0; i<8; i++)
  93.                 {
  94.                     *(*(chess2+row)+i) = 0;
  95.                 }
  96.                 *(*(chess2+row)+j) = 1;
  97.                 EightQueen(row+1, n, chess2);
  98.             }
  99.         }


  100.     }
  101. }

  102. int main()
  103. {
  104.     int chess[8][8];
  105.     int i, j;

  106.     for(i=0; i<8; i++)
  107.     {
  108.         for(j=0; j<8; j++)
  109.         {
  110.             chess[i][j] = 0;
  111.         }
  112.     }
  113.     EightQueen(0, 0, chess);
  114.     printf("总共有%d解决方法!\n", num);

  115.     return 0;
  116. }
复制代码

最佳答案
2017-4-25 15:19:39
楼主这里打错了

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

还有这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i][j]);
            }
            printf("\n");
        }
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-25 15:19:39 | 显示全部楼层    本楼为最佳答案   
楼主这里打错了

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

还有这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
        }
    }
这两段代码时直接复制的吧,这个是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 21:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表