鱼C论坛

 找回密码
 立即注册
查看: 2703|回复: 6

[已解决]八皇后问题怎么执行的92次,一次if语句执行完不就结束了吗

[复制链接]
发表于 2018-5-2 16:43:20 | 显示全部楼层 |阅读模式

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

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

x
  1. //八皇后问题
  2. #include<stdio.h>
  3. int count=1;
  4. int notdanger(int row,int j,int (*chess)[8])
  5. {
  6.         int i,k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
  7.         for (i=0;i<8;i++) //判断棋子所在的列是否危险
  8.         {
  9.                 if(chess[i][j]!=0)
  10.                 {
  11.         flag1=1;   //1表示有危险
  12.         break;
  13.         }
  14.         }
  15.         for (i=row,k=j;i>=0&&k>=0;i--,k--)//判断左上方是否危险
  16.     {
  17.         if(chess[i][k]!=0)
  18.         {
  19.         flag2=1;
  20.         break;
  21.         }
  22.     }
  23.     for(i=row,k=j;i>=0&&k<8;i--,k++)//判断右上方是否危险,这里不能是小于等于
  24.     {
  25.         if(chess[i][k]!=0)
  26.         {
  27.         flag3=1;
  28.         break;
  29.         }
  30.     }
  31.     for(i=row,k=j;i<8&&k>=0;i++,k--)//判断左下方是否危险
  32.     {
  33.         if(chess[i][k]!=0)
  34.         {
  35.         flag4=1;
  36.         break;
  37.         }
  38.     }
  39.     for(i=row,k=j;i<8&&k<8;i++,k++)//判断右下方是否危险
  40.     {
  41.         if(chess[i][k]!=0)
  42.         {
  43.         flag5=1;
  44.         break;
  45.         }
  46.     }
  47.     if(flag1||flag2||flag3||flag4||flag5)
  48.     {
  49.         return 0;
  50.     }
  51.     else
  52.     {
  53.     return 1;
  54.     }
  55. }
  56. void eightgueen(int row,int col,int (*chess)[8])
  57. {
  58.         int chess2[8][8],i,j;
  59.         for (i=0;i<8;i++)     //用chess2保存之前赋过1的棋子
  60.         {
  61.                                    //不然递归调用时chess2又被全部置0
  62.                 for (j=0;j<8;j++)
  63.                 chess2[i][j]=chess[i][j];
  64.         }
  65.         if(row==8) //到第八行就输出
  66.         {
  67.                 printf("第%d种\n",count);
  68.                 for (i=0;i<8;i++)
  69.                 {
  70.                         for (j=0;j<8;j++)
  71.                     printf("%d ",chess2[i][j]);
  72.                         printf("\n");
  73.                 }
  74.                 printf("\n");
  75.                 count++;
  76.         } else
  77.         {
  78.             for (j=0;j<col;j++)//先判断每一列上的数是否危险
  79.                 {
  80.                         if(notdanger(row,j,chess2))
  81.             {
  82.               for(i=0;i<8;i++)
  83.               chess2[row][i]=0;  //将不危险的那一整列(除了那row行)先赋值为0
  84.               chess2[row][j]=1;  
  85.                               eightgueen(row+1,col,chess2);//如果不危险,继续往下一行
  86.             }
  87.                 }
  88.         }
  89. }
  90. int main()
  91. {
  92.         int i,j,chess[8][8];
  93.         for (i=0;i<8;i++)
  94.         {
  95.                 for (j=0;j<8;j++)  //先全部赋值为0
  96.                 chess[i][j]=0;
  97.         }
  98.         eightgueen(0,8,chess);
  99.     return 0;
  100. }
复制代码
最佳答案
2018-5-2 17:12:29
幽梦三影 发表于 2018-5-2 17:07
if执行了else不就不被执行了么

是啊,但是这个函数被递归调用了,所以执行了很多次if-else判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-2 17:04:09 | 显示全部楼层
递归调用,第85行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-2 17:07:59 From FishC Mobile | 显示全部楼层
BngThea 发表于 2018-5-2 17:04
递归调用,第85行

if执行了else不就不被执行了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-2 17:12:29 | 显示全部楼层    本楼为最佳答案   
幽梦三影 发表于 2018-5-2 17:07
if执行了else不就不被执行了么

是啊,但是这个函数被递归调用了,所以执行了很多次if-else判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-2 20:41:54 From FishC Mobile | 显示全部楼层
BngThea 发表于 2018-5-2 17:12
是啊,但是这个函数被递归调用了,所以执行了很多次if-else判断

我还是不明白,难不成83行意思标错了,之前已经赋值0了,这里又赋值0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-2 21:31:23 From FishC Mobile | 显示全部楼层
幽梦三影 发表于 2018-5-2 20:41
我还是不明白,难不成83行意思标错了,之前已经赋值0了,这里又赋值0

不同的路径当然分别标注
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 10:08:07 From FishC Mobile | 显示全部楼层
BngThea 发表于 2018-5-2 21:31
不同的路径当然分别标注

我终于懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 18:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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