`
sony-soft
  • 浏览: 1105173 次
文章分类
社区版块
存档分类
最新评论

十一、回溯法框架

 
阅读更多

1. n皇后问题

procedure try(i:byte);
var j:byte;
begin
if i=n+1 then begin print;exit;end;
for j:=1 to n do
if a[i] and b[j+i] and c[j-i] then begin
x[i]:=j;
a[j]:=false; b[j+i]:=false; c[j-i]:=false;
try(i+1);
a[j]:=true; b[i+j]:=true; c[j-i]:=true;
end;
end;

2.Hanoi Tower 汉诺塔

h(n)=2*h(n-1)+1
h(1)=1
初始所有铜片都在a柱上
procedure hanoi(n,a,b,c:byte); {将第n块铜片从a柱通过b柱移到c柱上}
begin
if n=0 then exit;
hanoi(n-1,a,c,b); {将上面的n-1块从a柱通过c柱移到b柱上}
write(n,’moved from’,a,’to’,c);
hanoi(n-1,b,a,c);{ 将b上的n-1块从b柱通过a柱移到c柱上
end;

初始铜片分布在3个柱上,给定目标柱goal
h[1..3,0..n]存放三个柱的状态,now与nowp存最大的不到位的铜片的柱号和编号,h[I,0]存第I个柱上的个数。

Procedure move(k,goal:integer); {将最大不到位的k移到目标柱goal上}
Begin
If k=0 then exit;
For I:=1 to 3 do
For j:=1 to han[I,0] do
If h[I,j]=k then begin now:=I;nowp:=j; end; {找到k的位置}
If now<>goal then begin {若未移到目标}
Move(k-1,6-now-goal); {剩下的先移到没用的柱上}
Writeln(k moved from now to goal);
H[goal,h[goal,0]+1]:=h[now,nowp]; h[now,nowp]:=0;
Inc(h[goal,0]); dec(h[now,0]);
Move(k-1,goal); {剩下的移到目标上}
End;

分享到:
评论

相关推荐

    算法分析之回溯法算法框架课件

    "算法分析之回溯法算法框架课件" 该课件主要介绍了回溯法算法框架的基本概念、原理和应用。回溯法是一种搜索算法,用于解决组合优化问题。该算法框架的核心思想是通过深度优先搜索来探索解空间,找到问题的最优解。...

    回溯法讲义 ppt版

    回溯法是一种强大的算法,常用于解决复杂的问题,如组合优化和约束满足问题。它采用深度优先搜索策略,尤其适用于解...在实际应用中,理解和熟练掌握回溯法的框架和策略,结合具体问题的特点,能够高效地解决复杂问题。

    回溯法处理骑士游历问题

    dfs中的回溯法,poj2488骑士游历,主要是回溯要将所有的点都遍历到。

    算法分析与设计PPT 回溯法

    回溯法的算法框架包括以下几个关键部分: 1. **问题的解空间**:首先定义问题的解空间,这是一系列可能的解的集合,每个解通常可以表示为一个向量。解空间需要满足问题的显式和隐式约束。 2. **深度优先搜索**:...

    利用回溯法解0-1背包问题讲解

    利用回溯法解0-1背包问题讲解 利用回溯法解0-1背包问题是子集选取问题,0-1背包问题是NP难题,回溯法可以很好地解决背包问题,以期得到最优解。 回溯法概念: * 回溯法是一个既带有系统性又带有跳跃性的搜索算法...

    C++类库与算法 STL 算法与分析 皇后问题回溯法实现程序源代码 回溯法示例代码

    本主题聚焦于C++类库与算法的应用,特别是标准模板库(STL)中的算法,并通过一个具体的实例——皇后问题的回溯法实现来深入探讨。 皇后问题是一个经典的计算机科学问题,它要求在棋盘上放置N个皇后,使得任意两个...

    c++之回溯法(通用算法)

    以下是一个通用的回溯法框架: ```cpp void backtrack(int depth, vector&lt;int&gt;& solution, const vector&lt;int&gt;& constraints) { if (isValid(solution, constraints)) { // 如果当前解合法,打印或存储解 ...

    算法设计与分析 回溯法

    回溯法是一种重要的算法设计策略,常用于解决复杂的问题,如搜索、组合优化和逻辑推理等。它通过尝试所有可能的解空间分支来寻找问题的解,当发现某一分支无法得到有效解时,会“回溯”到上一步,尝试其他分支。这种...

    骑士巡游问题(马步问题),用回溯法实现的

    回溯法是一种用于求解组合优化问题的有效算法,特别适合处理有大量可能解且需要找到所有解或最优解的问题。在骑士巡游问题中,回溯法通过尝试构建可能的路径,并在发现错误时回退,来寻找可行的解决方案。具体步骤...

    用c++实现的 0-1背包 回溯法

    回溯法的基本思想:确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。这个开始结点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深...

    第5章 回溯法.pdf

    在理解回溯法之前,需要掌握其算法框架,其中包含四个主要方面:递归回溯、迭代回溯、子集树算法框架以及排列树算法框架。递归回溯是一种通过递归调用函数本身来实现的回溯,而迭代回溯则是在循环结构中实现的。子集...

    N后问题的回溯法实现C#

    回溯法是一种在搜索解空间树时寻找解的算法,它通过尝试所有可能的路径来解决问题,当发现当前路径无法到达目标状态时,就“回溯”到上一步,尝试其他路径。 在C#中实现N后问题的回溯法,首先需要理解C#的基本语法...

    回溯法实现0-1背包问题

    针对这一问题,C++语言提供了一种灵活且强大的编程框架,可以实现高效的回溯法算法。在编写程序时,首先需要设计背包结构体,这个结构体通常包含物品的重量、价值、序号等属性。定义好结构体后,便可以依据特定的...

    01背包问题回溯法

    回溯法是解决这类问题的一种有效策略,尤其适用于探索所有可能的解决方案空间。 回溯法是一种试探性的解决问题的方法,通过尝试逐步构建可能的解决方案,如果在任何时候发现当前路径无法导出有效解,则会撤销最近的...

    用回溯法解符号三角形

    在VC6.0环境下实现回溯法解符号三角形,首先需要创建一个程序框架,包括数据结构来表示三角形,以及用于回溯的函数。数据结构可以是一个二维数组,用来存储每个单元格的符号。回溯函数则递归地填充三角形的每一层,...

    回溯框架

    回溯法可以逐行放置皇后,每次放置后检查是否违反规则,若违反则回溯并尝试其他位置。 另一个经典应用是图着色问题,目标是给图的各个顶点分配颜色,使得相邻顶点颜色不同。利用回溯法,我们可以尝试为每个未着色的...

    基于回溯法的最小重量问题论文设计

    ### 基于回溯法的最小重量问题论文设计 #### 摘要与背景介绍 本文档讨论了一种利用回溯法解决最小重量问题的方法。该问题涉及到为一台机器选择最佳组件组合的问题,其中每个组件可以从多个供应商处获得,且每个供应...

    c++ 用回溯法解决经典的N皇后问题

    这个问题通常用于展示回溯法的使用,回溯法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在发现某一步违反条件时撤销这一步,尝试其他路径。 在C++中解决N皇后问题,我们需要定义一个二维数组来表示...

    TSP.zip_tsp_tsp回溯法_回溯法_回路长度最短_最短长度回路

    回溯法是一种在给定搜索空间中寻找问题解的有效算法,尤其适用于解决组合优化问题...虽然回溯法的时间复杂度通常较高,不适合大规模问题,但它提供了一个直观的理解TSP问题的框架,并在小规模问题中表现出良好的性能。

Global site tag (gtag.js) - Google Analytics