回溯算法讲解.docVIP

  • 12
  • 0
  • 约 17页
  • 2017-02-08 发布于重庆
  • 举报
回溯算法讲解

回溯算法 回溯算法与递归算法实现方法完全相同,所用的自定义过程或函数几乎完全相同,只是在我们对它的理解以及这些函数/过程运行时有所不同。它的基本思想是:在搜索过程中,当探索到某一步时,发现原先的选择达不到目标,就退回到上一步重新选择。它主要用来解决一些要经过许多步骤才能完成的,而每个步骤都有若干种可能的分支,为了完成这一过程,需要遵守某些规则,但这些规则又无法用数学公式来描述的一类问题。回溯的实现有递归和非递归两种方法。 例1、八皇后问题,要在国际象棋棋盘中放八个皇后,使任意两个皇后都不能互相吃,即任意两个皇后都不能处于同一行、同一列或同一斜线上,共有多少种放法,全部打印出来。 分析:皇后能吃同一行、同一列、同一对角线的任意棋子。所以,我们可以这样考虑:在每一行中放一个皇后,从第一行开始,在往每新的一行加皇后时,我们必须确保这个皇后必须不能与已经取得的所有皇后都不在同一列或同一条对角线。我们定义一个数组来存放八个皇后的在1到8行中的列位置,所以形式参数就可以只要一个——行号,当行号达到9时,我们就找到了一个答案。这样,我们就能把所有答案找出来。 uses crt; var a:array[1..8] of byte; {a数组用来存放8个皇后在棋盘中的列位置(为什么不用二维数组?)} {第一个元素记录第一个皇后在第一行中的位置,第二个元素记录第2个皇后在第二行中的位置..以此

文档评论(0)

1亿VIP精品文档

相关文档