回溯算法(N皇后)--C#版代码
来源:互联网 发布:重生小说改编的网络剧 编辑:程序博客网 时间:2024/05/18 01:34
前言:
回溯,顾名思义就是搜索一个问题的一个解时,当没有可行解救回到根节点再进行遍历,直到所有解都遍历一遍。
内容:
1、回溯法基本思想:
在确定了解空间的组织结构后,回溯法从开始结点(根节点)出发,以深度优先的方式搜索整个解空间。这个开始节点就成为了一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为了一个新的活结点,并成为当前扩展结点。如果在当前扩展界定啊出不能再向纵深方向移动,则当前的扩展结点就成为死结点。换句话说这个结点不再是一个活结点。此时,应往回移动(回溯)至最近的有一个活结点处,并使这个活结点成为当前的扩展结点。回溯法即以这种工作凡是递归地解空间中搜索,直到找到所要求的解或解空间中已无活结点时为止。
2、N皇后问题:
(1)概念:
这是来源于国际象棋的一个问题。N后问题要求在一个N x N格的棋盘上放置n个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子。因此,n后问题等价于要求在一个N x N格的棋盘上放置n个皇后,使得任何两个皇后不能被放在同一行或同一列或同一条斜线上。
(2)代码展示:
class Class1 { static void Main(string[] args) { int n = 8; Queue(n); Console.ReadLine(); } public static void Queue(int n) { int i; int index = 1; //第一个皇后 int[] CNum = new int[n + 1]; int ANum = 0; string sss = null;//定义一个空变量 for (i = 1; i <= n; i++) { CNum[i] = 0;//初始化从第0列开始 } while (index > 0) { CNum[index]++;//第index个皇后所在的列数 while (CNum[index] <= n && !Place(CNum, index)) //寻找皇后的位置 { CNum[index]++; } if (CNum[index] <= n) { if (index == n)//最后一个皇后放置成功 { ANum++;//第几种可行方案 sss = "\t " + "方法" + ANum + ":"; for (i = 1; i <= n; i++) { sss = sss + " " + CNum[i]; } Console.WriteLine(sss); //for (i = 1; i <= n; i++) // CNum[index]++; } else //继续寻找下一个皇后的位置 { index++; //皇后数+1 CNum[index] = 0; } } else { index--; //当前皇后无法放置,回溯至上一个皇后 } } } public static bool Place(int[] Column, int index) //Column--列 { int i; for (i = 1; i < index; i++)//如果index为3,那么就跟前两个皇后进行比较 { int Columndiffer = System.Math.Abs(Column[index] - Column[i]); int Rowdiffer = System.Math.Abs(index - i); if (Column[i] == Column[index] || Columndiffer == Rowdiffer)//是否有皇后与其在同列或同一斜线上 { return false; } } return true; //没有皇后与其同行,同列或同对角线 } }
阅读全文
0 0
- 回溯算法(N皇后)--C#版代码
- N皇后问题(回溯算法解法)
- 【算法分析】回溯法解八皇后问题(n皇后问题)
- N皇后(回溯)
- N皇后的回溯算法
- N 皇后求解回溯算法
- 回溯算法n皇后问题
- n皇后问题递归算法(回溯法)
- hdu 2553 N皇后问题(回溯算法)
- N皇后问题(回溯)
- N皇后问题(回溯)
- n皇后问题(回溯)
- 求 N 皇后问题回溯算法
- n皇后问题——回溯算法
- 回溯算法之 N皇后问题
- 回溯算法之N皇后问题
- 回溯算法—n皇后问题
- 求 N 皇后问题回溯算法
- POJ 1085 Triangle War 博弈 (对抗搜索 alpha-beta 剪枝)
- java的认识
- html 开发工具
- 周末训练笔记+hdu1255+4288
- RecyclerView加载数据进行展示
- 回溯算法(N皇后)--C#版代码
- Tomcat Can't load AMD 64-bit .dll on a IA 32
- 处理机管理
- 第15篇
- weblogic 使用总结
- hdu 3987 最小割边数模板题
- 1.再次学C语言
- 属性动画
- byte类型数据的取值范围及溢出后的强制转换及在内存中的存储结果