`
dyccsxg
  • 浏览: 204783 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

N 皇后求解回溯算法

阅读更多
  1. /*******************************************************
  2. *n后求解问题
  3. *******************************************************/
  4. #include<iostream.h>
  5. #include<stdio.h>
  6. #include<math.h>
  7. #include<conio.h>
  8. #defineMAXNUMBER20//最大求解数
  9. //输出n后的解
  10. /******************************************************
  11. *例如8皇后的一组解为:
  12. *15863724
  13. *其含义为
  14. *第1个皇后位于第1行第1列
  15. *第2个皇后位于第2行第5列
  16. *第3个皇后位于第3行第8列
  17. *第4个皇后位于第4行第6列
  18. *......
  19. *第i个皇后位于第i行第x[i]列(i>=1)
  20. ******************************************************/
  21. voidoutput_queens(intx[],intn)
  22. {
  23. for(inti=1;i<=n;i++)
  24. printf("%3d",x[i]);
  25. printf("\n");
  26. }
  27. //判断第k个皇后是否合法
  28. boolcheck(intx[],intk)
  29. {
  30. for(inti=1;i<k;i++)
  31. {//列冲突x[i]==x[k]或斜线冲突abs(k-i)==abs(x[k]-x[i])
  32. if(x[i]==x[k]||abs(k-i)==abs(x[k]-x[i]))
  33. returnfalse;
  34. }
  35. returntrue;
  36. }
  37. /*******************************************************
  38. *n后问题求解
  39. *input:n,thenumberofqueens
  40. *output:thevectorofsolution,X
  41. *******************************************************/
  42. intn_queens(intn,intx[])
  43. {
  44. intnCount=0;//解的个数
  45. intk=1;//先处理第1个皇后
  46. x[1]=0;
  47. while(k>0)
  48. {
  49. x[k]=x[k]+1;//在当前列加1的位置搜索
  50. while(x[k]<=n&&!check(x,k))
  51. x[k]=x[k]+1;//如果当前列x[k]不满足条件则搜索下一列x[k]+1
  52. if(x[k]<=n)
  53. {//列x[k]满足条件
  54. if(k==n)
  55. {//当前是最后一个皇后=>得到一组解
  56. //break;//若此处break则只得到一组解
  57. nCount++;//解的个数加1
  58. output_queens(x,n);//输出n后的解
  59. }else
  60. {//计算第k+1个皇后
  61. k++;
  62. x[k]=0;
  63. }
  64. }else
  65. {//不存在满足条件的列=>回溯
  66. x[k]=0;
  67. k--;
  68. }
  69. }
  70. returnnCount;
  71. }
  72. voidmain()
  73. {
  74. intn=8;
  75. intx[MAXNUMBER]={0};
  76. printf("GameStart:\n");
  77. intnCount=n_queens(8,x);
  78. printf("TotalNumber:%4d\n",nCount);
  79. printf("Gameover!!!\n\n\n");
  80. }
分享到:
评论

相关推荐

    用栈求解n皇后问题 ,经典的回溯算法问题.rar

    n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题的回溯算法n皇后问题...

    n后问题回溯算法 java

    在n皇后问题中,回溯算法通常通过递归的方式实现,每次尝试在一个未放置皇后的列上放置皇后,并检查是否违反了任何约束条件。如果违反,则回溯到上一步,尝试其他列。这个过程会持续进行,直到找到所有可行的解决...

    用栈求解n皇后问题 ,经典的回溯算法问题

    n 皇后问题是一道经典的回溯算法问题,其目标是在一个 � × � n×n 的棋盘上放置 � n 个皇后,使得任意两个皇后都不能在同一行、同一列或同一斜线上。 栈可以用来辅助实现回溯算法,本质上就是手动维护了递归...

    利用回溯法解决n皇后问题

    **总的来说,利用回溯法解决n皇后问题,关键在于理解回溯算法的原理,正确地设计递归函数,以及有效地实施剪枝策略。通过C++编程,我们可以将这些思想转化为可执行的代码,并在VC6.0环境下进行测试和调试。**

    N皇后求解问题——递归和回溯方法

    这个问题常用于演示回溯算法和递归在解决约束满足问题中的应用。 首先,我们来探讨递归方法。在C语言中,递归是一种函数调用自身的技术。对于N皇后问题,我们可以定义一个递归函数,该函数尝试在当前行放置皇后,并...

    回溯算法n皇后问题

    回溯算法是一种基于深度优先搜索的算法,常用于解决复杂问题的求解,例如N皇后问题。N皇后问题是在一个N×N的棋盘上放置N个皇后,要求任何两个皇后不能处于同一行、同一列或同一斜线上,找出所有可行的解决方案。此...

    回溯算法-求解N皇后问题-python实现

    回溯算法,求解N皇后问题,python实现。 回溯算法是一种通过递归和逐步撤销(即回溯)来解决问题的算法。以下是对回溯算法求解N皇后问题的详细介绍: 1. 基本概述 - 定义:N皇后问题是一个经典的计算机科学问题,...

    回溯算法求解n皇后问题

    此过程使用回溯算法求出在一个n*n棋盘上放置n个皇后,使其任意两个皇后即不同行,也不同列,也不在同一斜角线上

    n皇后问题回溯法

    ### n皇后问题回溯法解析 #### 一、问题背景及定义 n皇后问题是一个经典的计算机...通过以上分析,我们可以看到回溯法是解决n皇后问题的一种有效方法,而C++语言的强大功能和灵活性使得实现这类算法变得相对简单。

    N皇后经典算法--回溯递归

    **回溯递归在解决N皇后问题中的应用** N皇后问题是一个经典的计算机科学问题,源自于19世纪的数学家高斯提出的八皇后问题。它要求在N×N的棋盘上放置N个皇后,使得任意两个皇后都无法互相攻击,即任意两个皇后不在...

    回溯算法的N皇后

    在N皇后问题中,回溯算法扮演了核心角色。 N皇后问题是一个经典的计算机科学问题,要求在N×N的棋盘上放置N个皇后,使得任意两个皇后都无法互相攻击,即任意两个皇后不在同一行、同一列或同一斜线上。这个问题有...

    算法设计与分析 回溯法 n皇后问题

    回溯法是一种重要的算法设计与分析技术,...通过对n皇后问题的求解,我们可以学习到如何设计和实现回溯算法,以及如何用编程语言(如C++)来表达这些算法思想。同时,这也有助于提升我们的逻辑思维能力和问题解决能力。

    n 皇后问题n 皇后 回溯法n 皇后 回溯法

    根据给定的信息,本文将详细解释“N皇后问题”及其回溯法求解方案。 ### N皇后问题概述 N皇后问题是指在一个N×N的棋盘上放置N个皇后,使得任意两个皇后都不会互相攻击(即任何两个皇后不能位于同一行、同一列或...

    C++n个皇后回溯法求解

    代码示例中使用了回溯法来求解n皇后问题。具体步骤如下: 1. **定义变量**:定义了一个整型数组`a[n]`用来存储每个皇后所在的列号,其中`n`是棋盘的大小。 2. **函数`place(int k)`**:此函数用于检查第`k`个皇后...

    回溯算法实现5皇后问题

    通过理解这个过程,我们可以扩展到更一般的n皇后问题,只需要修改棋盘大小和尝试放置的皇后数量即可。回溯算法在这种情况下仍然有效,但它可能会涉及到更复杂的剪枝策略来减少搜索空间,提高效率。 总结来说,回溯...

    backtracking_N皇后_01背包_回溯算法_售货员问题_图的m着色_

    本篇文章将深入探讨回溯算法在解决N皇后问题、01背包问题、旅行售货员问题以及图的m着色问题中的应用。 1. **N皇后问题**:这是一个经典的问题,目标是在n×n的棋盘上放置n个皇后,使得任何两个皇后都不能在同一行...

    数据结构C语言的n皇后算法

    数据结构 C 语言的 N 皇后算法是数据结构和 C 语言应用中的一种经典算法。该算法解决了 N 皇后问题,即在 N×N 格的国际象棋上摆放 N 个皇后,使其不能互相攻击的摆法问题。该算法的优化设计是通过对 C 语言的知识...

    随机算法和回溯求解N皇后问题

    分别用随机算法和回溯法求解N皇后问题 附有详细C++源代码

    利用回溯法求解n皇后问题

    回溯法求解n皇后问题,n皇后问题是一个非常有意思的游戏

    C++源代码 N皇后问题 回溯法

    算法分析实验 回溯法求解N皇后问题 源代码

Global site tag (gtag.js) - Google Analytics