1. /*========================================
  2. 功能:实现n皇后问题,这里实现4皇后问题
  3. 算法:回溯法
  4. ==========================================*/
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #define TRUE 1
  9. #define FALSE 0
  10. #define NUM_QUEEN 4 /* 皇后个数 */
  11.  
  12. typedef int BOOL;
  13.  
  14. void n_queen(int sol[], int n);
  15. BOOL place(int solution[], int k);
  16. void display();
  17.  
  18. int solution[NUM_QUEEN + ] = {}; /* 皇后问题的解向量 */
  19.  
  20. void main()
  21. {
  22. n_queen(solution, NUM_QUEEN);
  23. display();
  24. }
  25. /*=================================
  26. 功能:找出满足n皇后问题的解向量
  27. 输入:皇后个数n
  28. 输出:n皇后的解向量sol[]
  29. ===================================*/
  30. void n_queen(int sol[], int n)
  31. {
  32. int k = ; /* 从第一个皇后开始 */
  33. sol[k] = ;
  34. while(k > )
  35. {
  36. sol[k] = sol[k] + ;
  37. while(sol[k] <= n && !place(sol, k)) /* 如果sol[k]列不满足条件 找下一列 */
  38. sol[k] = sol[k] + ;
  39. if(sol[k] <= n) /* 找到满足条件的列 */
  40. {
  41. if(k == n)
  42. break; /* 最后一个皇后处理完 直接退出 */
  43. else
  44. k = k + ; /* 处理下一个皇后 */
  45. }
  46. else /* 判断完该行所有列 没有合适的位置 回溯 */
  47. {
  48. sol[k] = ;
  49. k = k - ;
  50. }
  51. }
  52. }
  53. /*==========================================================
  54. 功能:判断第k个皇后的位置 是否正确 与前面k - 1个皇后比较
  55. 输入:前k - 1个解向量
  56. 输出:第k个位置是否正确
  57. ============================================================*/
  58. BOOL place(int sol[], int k)
  59. {
  60. int i;
  61.  
  62. for(i = ; i < k; i ++)
  63. {
  64. if(sol[i] == sol[k] || abs(sol[i] - sol[k]) == abs(i - k))
  65. return FALSE;
  66. }
  67.  
  68. return TRUE;
  69. }
  70. /*===========================
  71. 功能:显示n皇后的解决向量
  72. 输入:无
  73. 输出:n皇后解决向量
  74. =============================*/
  75. void display()
  76. {
  77. int i = ;
  78. printf("%d QUEES solution:", NUM_QUEEN);
  79. for(; i <= NUM_QUEEN; i ++)
  80. {
  81. printf("%d\t", solution[i]);
  82. }
  83. printf("\n");
  84. }

实现n皇后问题(回溯法)的更多相关文章

  1. 八皇后问题-回溯法(MATLAB)

    原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...

  2. HDU 2553 n皇后问题(回溯法)

     DFS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  3. 算法入门经典-第七章 例题7-4-1 拓展 n皇后问题 回溯法

    实际上回溯法有暴力破解的意思在里面,解决一个问题,一路走到底,路无法通,返回寻找另   一条路. 回溯法可以解决很多的问题,如:N皇后问题和迷宫问题. 一.概念 回溯算法实际类似枚举的搜索尝试过程,主 ...

  4. N皇后问题--回溯法

    1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每 ...

  5. noj算法 8皇后打印 回溯法

    描述: 输出8皇后问题所有结果. 输入: 没有输入. 输出: 每个结果第一行是No n:的形式,n表示输出的是第几个结果:下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格.不同的结果中,先输出第 ...

  6. JAVA实现N皇后问题(回溯法)

    package com.leetCode; /** * Follow up for N-Queens problem. Now, instead outputting board configurat ...

  7. N皇后问题 回溯法 C/C++

    一:问题描述 N皇后问题(含八皇后问题的拓展,规则同四皇后):在N*N的棋盘上,放置N个皇后,要求每一横行每一列,每一对角线上均只能放置一个皇后,求解可能的方案及方案数. 二:代码及结果如下 #inc ...

  8. 8皇后-----回溯法C++编程练习

    /* * 八皇后问题回溯法编程练习 * 在8×8的棋盘上,放置8个皇后,两个皇后之间不能两两攻击 * 也即,直线,垂直45度.135度方向不能出现两个皇后 * * copyright Michael ...

  9. 回溯法解决N皇后问题(以四皇后为例)

    以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...

随机推荐

  1. h5拖放-基础知识

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. HTML5表单内元素的required属性

    当表单内元素(如input.textarea)中有required属性并且值不为false的时候,则该字段不能为空,否则提交失败. <input type="text" au ...

  3. 使用ueditor时候修改图片路径及其相关信息

    ueditor功能比较强大  使用也比较方便 但是有一些东西是需要我们自己根据实际情况去设置的 以下是关于图片/涂鸦/视频等上传信息的更改: 首先我们要找到配置文件config.json 注意不是co ...

  4. 【转】必需知道的 SharePoint 权限 Tips

    SharePoint Tips about Permissions: What you need to know         I have been writing tips about Shar ...

  5. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  6. JAXB - Annotations, The Annotation XmlElement

    The basic annotation for a field that's intended to be an element is XmlElement. It permits you to d ...

  7. 自己动手写一个简单的(IIS)小型服务器

    因为第一次在博客园发表随笔,不太会用,这个笔记是我之前在印象笔记中写好的,然后直接copy过来,有兴趣自己做一个IIS服务器的小伙伴们可以参照下面的流程做一次,也可以叫我要源代码,不过要做完,我觉得花 ...

  8. unity3d环境安装指南: Unity 4.5.5 + Visual Studio 2010

    1. UnitySetup-4.5.5.exe 官网下载最新版本4.X 安装exe文件 2. Unity 4.x Pro Patch.exe 复制exe到安装目录下 C:\Program Files ...

  9. 鼠标点击input时,placeholder中的提示信息消失

    html代码: <input type="text" placeholder="多个关键词空格隔开"> 鼠标点击input时,placeholder ...

  10. 程序员面试题精选100题(38)-输出1到最大的N位数[算法]

    作者:何海涛 出处:http://zhedahht.blog.163.com/ 题目:输入数字n,按顺序输出从1最大的n位10进制数.比如输入3,则输出1.2.3一直到最大的3位数即999. 分析:这 ...