`
jimmee
  • 浏览: 538772 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于回溯法

    博客分类:
  • J2SE
 
阅读更多
回溯的基本思想是:从一个给定的起始位置,我们希望到达一个目的位置。我们重复地进行选择(可能是猜测)下一个位置应当是什么。如果一个给定的选择是有效的,即新的位置可能位于通向目的位置的途径中,则前进到这个新的位置,然后继续。如果一个给定的选择通向了死胡同 ,则回到前面的位置,进行其他的选择。回溯就是通过一系列位置选择到达目的位置,并且在不能到达目的位置时反向退回的策略。

回溯类的通用接口如下:
import java.util.*;

public interface Application{
//如果位置pos为通向目标位置的路径上,返回true,否则返回false
boolean valid(Position pos);

//标记位置pos,这个位置pos可能在目标路径上
void record(Position pos);

//若pos是目标位置,返回true,否则,返回false
boolean done(Position pos);

//标记位置pos,此位置不在目标路径上
void undo(Position pos);

//返回路径的字符串
  String toString();
 
  //枚举从当前位置开始,所有可能的下一步位置
  Iterator iterator(Position pos);

典型的回溯的代码:
public boolean tryToSolve(Position pos){
boolean success=false;
Iterator itr=app.iterator(pos);
while(!success&&itr.hasNext()){
   pos=(Position)itr.next();
   if(app.valid(pos)){
       app.record(pos);
       if(app.done(pos))
          success=true;
       else{
          success=tryToSolve(pos);
          if(!success)
             app.undo(pos);
      }
   }
}
}
return success;
}

注意:从pos位置开始的移动选择,有三种可能性:
1) 其中的一个选择是目的位置。那么while循环结束,返回true,说明成功结束。
2) 其中的一个选择是有效选择,但不是目的位置。那么再次调用tryToSolve方法,从这个有效选择开始。
3)没有一个选择是有效的。那么while循环结束,返回false,说明从当前位置无法到达目标位置。
tryToSolve方法的参数表示一个有效的、记录了的位置。
分享到:
评论

相关推荐

    搜索练习,回溯法,回溯法

    文件“第5章 回溯法.ppt”很可能包含了关于回溯法的详细讲解,包括其原理、应用示例、如何实现以及剪枝策略等内容。通过学习这份资料,你可以深入理解回溯法的核心思想,并掌握如何在实际问题中运用这种强大的算法...

    n后问题---递归回溯法 n后问题---递归回溯法

    n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---...

    回溯法搜索排列树算法园排列问题.rar_Backtracking Search_回溯树_回溯法_算法设计与分析

    "www.pudn.com.txt"可能是一个链接或者资源引用,指向更多关于回溯法和排列问题的资料。这个文件通常包含URL或其他相关信息,供学生进一步研究或下载额外的辅助材料。 回溯法的核心思想是在搜索解空间树的过程中,...

    回溯法实验报告

    【回溯法实验报告】 本实验报告主要围绕回溯法这一算法进行,旨在深入理解和掌握回溯法的基本思想和应用。回溯法是一种基于试探性的解决问题的算法,它通过逐步构造可能的解并检查这些解的合法性来寻找问题的正确...

    常见回溯法问题解决方案

    回溯法是一种在尝试解决问题时,通过试探性地做出选择并逐步构造可能的解,当发现当前选择不能导致有效解时,就撤销该选择并尝试其他路径的搜索算法。它通常用于解决组合优化问题,如圆排列问题、装载问题等。在本...

    回溯法(算法)-代码

    从提供的压缩包文件名称“回溯法”来看,可能包含的是关于回溯法的代码示例,可能涉及上述提到的一些经典问题的实现。通过阅读和理解这些代码,你可以更好地掌握回溯法的使用和实现技巧。在实际编程中,根据具体问题...

    回溯法(ACM程序设计,算法竞赛)

    回溯法是一种重要的算法策略,尤其在解决计算机科学中的优化问题和搜索问题时十分常见,如ACM程序设计和算法竞赛中就常常被用到。它通常用于在约束条件下寻找问题的所有解或某个最优解。回溯法的核心思想是通过试探...

    批处理作业调度回溯法java实现

    批处理作业调度回溯法java实现 批处理作业调度回溯法是一种解决作业调度问题的算法,它通过回溯法来搜索所有可能的解决方案,以找到最佳的作业调度方式。在这个Java实现的批处理作业调度程序中,我们使用回溯法来...

    回溯法解决数独问题-2.docx

    "回溯法解决数独问题" 本文主要介绍了使用 MATLAB 解数独问题的回溯法解决方法。数独是一种非常流行的智力游戏,需要填充 9x9 的方格,使每一行、每一列、以及所分出的 9 个主要 3x3 区块,包含 1 到 9 所有的数字...

    算法分析论文——回溯算法的应用.zip

    回溯算法是一种强大的问题求解方法,尤其在解决复杂组合优化问题时表现出高效性。它是一种试探性的解决问题的方法,通过逐步构建可能的解决方案,并在过程中不断检查这些解决方案的有效性。如果发现当前路径无法导出...

    最优装载问题——回溯法

    最优装载问题——回溯法 最优装载问题——回溯法 最优装载问题——回溯法

    哈密顿回路 回溯法——C++代码

    在这个“哈密顿回路 回溯法——C++代码”的项目中,我们看到的是使用C++编程语言来实现的回溯法求解哈密顿回路。C语言和C++虽然在语法上有一定差异,但C++是在C语言基础上发展起来的,因此,此处的描述中提到的...

    实验四 用回溯法求解跳马问题.zip

    标题中的“实验四 用回溯法求解跳马问题”是一个典型的计算机科学与编程相关的课题,主要涉及的问题是利用回溯法解决棋盘游戏中的马的移动路径问题。回溯法是一种通过试探性的解决问题的方法,当遇到不符合条件的...

    回溯法01背包

    回溯法是一种在解决问题时通过试探性地做出选择并逐步构造解决方案的方法,如果发现当前选择无法得到有效的解,则撤销该选择,尝试其他可能的选择,这一过程就像沿着一条路径探索直至找到答案或者证明无解,然后返回...

    基于C++使用回溯法求解数织问题.zip

    基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题....

    回溯法_算法_

    在给定的文件"2018303305+樊攀+实验1"中,很可能包含了关于回溯法的案例分析和具体实现代码。通过阅读和理解这些材料,你可以更深入地了解如何将回溯法应用于实际问题中,以及如何优化回溯算法,如采用记忆化搜索来...

    批处理作业调度问题 回溯法——C++代码

    在这个场景中,回溯法是一种常用的解决策略,它是一种试探性的解决问题的方法,通过尝试所有可能的解决方案并逐步构建答案,当发现当前路径无法导出有效解时,会撤销最近的选择,退回一步重新尝试其他路径。...

Global site tag (gtag.js) - Google Analytics