设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

IT公司面试题收集整理---C相关---八皇后详解

2013-3-8 16:16| 发布者: 红黑魂| 查看: 1272| 评论: 0|原作者: wang6279026|来自: CSDN博客

摘要: 八皇后详解,有人可能看不懂上一篇帖子,我又特别整理了一下,尽量弄得简单易懂。注释很详细,基本上都有注释。先贴一张图,看图看程序比较容易贴上详细代码view plaincopyprint?#includestdio.h#defineROW8//代表列 ...

八皇后详解,有人可能看不懂上一篇帖子,我又特别整理了一下,尽量弄得简单易懂。注释很详细,基本上都有注释。

先贴一张图,看图看程序比较容易

贴上详细代码

  1. #include  
  2. #define ROW 8//代表列,坐标是x  
  3. #define COL 8//代表行,坐标是y  
  4. #define NUM 7//八皇后问题,数组下标0-7  
  5.   
  6. #define TRUE 0//真  
  7. #define FALSE 1//假  
  8.   
  9. #define YES 1//有皇后  
  10. #define NO 0//没有皇后  
  11.   
  12. #define NO_BACK 0//表示不需要回溯  
  13. #define BACK 1//表示需要回溯  
  14.   
  15.   
  16. int a[ROW][COL];//默认值都是0,表示坐标没有皇后,如果改为1,表示这个坐标有皇后  
  17. int k=0;//表示第k中情况  
  18.   
  19. //n代表遍历的列的下标,即X值。ROW  
  20. int queens(int n)  
  21. {  
  22.     int i, j;  
  23.     //输出八皇后棋盘  
  24.     if(n>NUM)  
  25.     {  
  26.         printf("----------%06d----------\n",++k);  
  27.         for(i=0;i
  28.         {  
  29.             for(j=0;j
  30.                 printf("%s",a[i][j]==1?"○":"●");//为0说明不是皇后,为1说明是皇后  
  31.             printf("\n");  
  32.         }  
  33.         printf("--------------------------\n\n");  
  34.         return BACK;//表示正常返回,进行回溯  
  35.     }  
  36.     //如果没有遍历完全,  
  37.     for(j=0;j//遍历Y值0->COL  
  38.     {  
  39.         int flag=TRUE;  
  40.         //这个循环遍历的是X值,就是Y值不变,X值变化  
  41.         for(i=0;i//根据传过来的列的下标X值,ROW值,进行遍历  
  42.         {  
  43.             //如果【同行】【左斜角,东北西南方向】【右斜角,西北东南方向】出现了皇后的话,则推出此次循环,进行下次循环  
  44.             if(a[i][j]==YES||((i+j-n)>=0&&a[i][i+j-n]==YES)||((j+n-i
  45.             {  
  46.                 flag=FALSE;  
  47.                 break;  
  48.             }  
  49.         }  
  50.         if(flag==TRUE)//如果刚才的循环没有出现这种情况  
  51.         {//那么此处放置皇后  
  52.             a[n][j]=YES;  
  53.             if(queens(n+1)==BACK)  
  54.             {//如果下层遍历需要进行回溯  
  55.                 a[n][j]=NO;//此处不放置皇后  
  56.             }else{//如果下层遍历不需要回溯的话,返回  
  57.                 return NO_BACK;  
  58.             }  
  59.         }  
  60.     }  
  61.     //遍历Y值的时候,一直没有出现合适的,出现了flag=FALSE;那么说明下级不能放置皇后,那么进行回溯  
  62.     return BACK;  
  63.       
  64. }  
  65. int main(void)  
  66. {  
  67.     queens(0);  
  68.     return 0;  
  69. }  

酷毙

雷人

鲜花

鸡蛋
3

漂亮

刚表态过的朋友 (3 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部