回溯算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Var
种 不 同的解 ,后来 有人 用 图论 的方法 解 出9 种 结果 。可 2
以用 回溯 的算 法 求 出这9 种 结果 。 图 l 其 中 的一种 结 2 是 果。 ( Q表示 皇后 的位 置 )
Q
Q
Q
Q
i i t g r : ne e ; b gn e i
Q
i 当前 状 态 为 边 界 f
中国 装 观代 备
END;
SN 49.3 C171" S1 24 N1 94/18 6
-
的状况 。在 八皇后 问题 中 ,将 行位 置作 为状 态 。
() 界 条 件 : 即在 什 么 情 况 下 程 序 不 再 递 归 下 3边 去 。 在 八 皇 后 问题 中 ,将 等 于 n l ( 生 一 种 成 功 放 + 产 法 )作为边 界条 件 。如 果是求 满足 某个 特 定条件 的一条 最佳路 径 ,则 当前状 态 到达边 界 时并非 一定 意 味着 此 时
EN D ;
P OC D R E URET Y( L I E R ; R H,: NT GE )
、 R ,, I T IJF: N EGER;
BEGI N
() 条件 和最优 性要求 :约束 条件是 这个数 没有 4约束 被填过, 一个就填 上,然后填 下一个 位置(, 1 找到 1 +) l : l
SN 】 SN 】A I】 计算 \ 向对角 线 的和 ) [2: [ 2+ [I { = ,; 方
E ND ;
法 ,对于 每一种 填法 都验 证每 行 、每列 、对 角线 上的和 是不 是 等于 1 ,其 中有 8 填 法符 合 每行 、每列 、对 角 5 种 线之和 都等 于 1。 5 () 状态 :填 的第h ,第 lU 为状态 。 1 定义 行 Y作
l SSN1 2. 43 67 1 8
C14 4 N19 / _9T
中国 装备 观代
2 11 0第第期 总年24 1 6期 1
回溯 算法
王 凤 红
回溯 算 法 是 程 序 设 计 中 最 重 要 的基 础 算 法 之 一 , 也 是 搜 索算 法 中 的一 种 控 制 策 略 , 回溯 算 法 的基 本 思 想 是 : 从 一 条 路 往 前 走 , 能 进 则 进 , 不 能 进 则 退 回 来 ,选 择 另外 一 条 路 再 走 。 它 是 从初 始 状 态 出发 ,运 用 题 目给 出 的条 件 、规 则 , 按 照深 度 优 先 搜 索 的 顺序 扩 展所 有可 能 情 况 ,从 中 找 出满 足 题 意 要 求 的 解 答 。 回 溯 法 是求 解 特 殊 型 计 数 题 或较 复杂 的枚 举 题 中使 用
VAR II EGE :NT R;
BEGI N P LACE: TRUE; = F OR I=lTO K. : 1D0
一
. 1算法分 析 . 列 出所 有可 能 的情况 从 中找 出符合 条件 的解 。从第 行第 ~ 列开 始 ,找一 个还 没有 填过 的数 填上 ,然 后就 填 下 一个 。当所 有可 能 的填 法都试 验 完 了以后就 回溯 到 上 一个 数 ,试 验 还没 有填 过 的数 。直 到九个 格全 部填 完
然后变 换 到b ,再变 换 到C ……最后 一种 填法 是e 。
P CE RO DUR R N ; 打 印结果 } EP I T {
V AR :NT I I EGER; BEGI N
F = O N DO WRI E X[ :) ORI 1 T ( I4 ; : T ]
I X[ = K]OR( BSX[ - K] AB (- ) F( I X【 ) ] A ( I x[ ) ] = SIK)
T N P AC :F S ;{ 已经 放好 的k 1 HE L E= AL E 跟 . 个皇 后不 在 同一行跟 对角线 上 }
END;
之 后 ,验 证 是不 是符 合条 件 。第 一种 填法 是 图3 中的a ,
第 i ,不产生攻击 ( lc-re 行上 paet )作为 约束条件 。 -u
[ 问题 描述】
() 与递 归 运 算 的 参数 :将 参 与递 归 运 算 的 参 数 6参
设 为递 归子程 序 的值参 或局 部变 量 。若这 些参 数 的存储 量 大 ( 如数 组 )且初 始值 需 由主程序 传入 ,为避 免 内 例 存溢 出,则必 须将 其设 为全 局变量 ,且 回溯 前 需恢 复其 递 归前 的值 。在 八皇 后 问题 中 ,将 皇后 的列 作 为参 与递 归运算 的参 数 。 2程 序清单 .
千 百年来 影 响 巨大 ,在文 学 、影视 中都 曾出现过 。九 宫
格最 早 叫 “ 书 ”,现在 也 叫 “ 方 ”。 洛 幻
在 《 雕 英雄传 》 中黄 蓉 曾破 解 九宫格 , 口诀 :戴 射 九履 一 ,左三 右七 ,二 四有 肩 ,八六 为 足 ,五居 中央 ,
如 图2 示 。 所
C NTI GE OU : NE R;{ 存放 方案 总数 }
X: R Y[一 OF I E R x i 存放 第i AR A 1N】 NT GE ;{ [里 ] 列这 个 皇后放 在xi [ 这一行 上 } ]
F NC I P AC ( I E  ̄ : L AN; { U T ON L E K: NT GE BOO E 看 看第k 皇后 能不 能放 上 } 个
、
回溯算法说明
1 法定义 . 算 回溯算法 是搜 索算 法 中的一种 控制 策略 。它 在包含 问题 的所有 解 的解空 间树 中 ,按照深 度优 先 的策 略,从
根 结 点 出发 搜索 解空 间树 。算法 搜索 至解 空 间树 的任一
结点 时 ,总 是先 判断 该结 点是 否肯 定不包 含 问题 的解 , 如果肯 定不 包含 ,则 跳过对 以该结 点为根 的子 树 的系统 搜 索 ,逐层 向其 祖先 结点 回溯 。否则 进入 该子 树 ,继续 按 深度 优先 的策 略进 行搜索 。回溯算 法在 用来 求 问题 的 所 有解 时 ,要回溯 到 根 ,且 根 结点 的所有 子树 都 已被 搜 索遍 才 结束 。回溯 算 法在用 来求 问题 的任 一解 时 ,只 要 搜 索到 问题 的一个 解就 可 以结束 。这 种 以深 度优 先 的方 式 系统地 搜索 问题 的解 的算法称 为 回溯算法 。 2算法描 述 . 回溯算 法描 述如 下 : po e ue u ( rcd r n 当前状 态 ); r
的情 况全 部试 验一遍 ,找 出满足 条件 的9种 结果 。 2
() 2 定义 状态 :即如 何 描述 问题 求 解 过程 中每 一 步
作者简介 :王凤红 ,本科 ,中教 一级 。 作者单位 :山东省北镇 中学电教 中心。
2 1 年7 01 月
2 1年第1 期 01 4
总 1期 第2 6
(1 索 范 围 :在 当前 状 态 不满 足 边 界 条 件 的情 况 4搜
下 ,应 如何 设计算 符值 的范 围 。换句话 说 ,如何 设定 fr o 语句 中循环 变量 的初 值和 终值 。在 八皇 后 问题 中 ,每列
x【 :I K] ; = I L E  ̄ T N R K+ ) 放好 了第k FP AC ( HE T Y( I;{ 列这 个
皇 后 ,接着放 第k l 0 + Y 的皇后 }
END ; E ND ;
BE N GI
T Y() R 1;
W RI LN (” THE T ALI TE OT S” . COUN T) :
END.
否 满足最优 性要求 。在八皇 后 问题 中 ,将k 的皇后放 在 列
() 界条件 : 当h 3 - 说 明 已经填完 一种 方案 ; 2边 = ,14 () 索范 围:这9 数 ;li9 3搜 个 < ;
FOR I=lTO N2 D0 :
I [ o S FSq UM T E E I H N XT ;
CoUNT: COUNT+I P NT; ; RI
频率 最 高的一 种算 法 。
一
i( f 子状态满 足 约束条 件) n 子 状态 满足最 优性 要 a d( 求) e n子 状态 t nr ( h u ;
ed { r n; f } o e d { n n; r } u
二 、经典例题分析
【 问题描 述1
八皇 后 问题是 一个 古老 而著 名的 问题 ,是 回溯算法 的典型例 题 。该 问题 由l 世 纪 著名 的数学 家高 斯于 1 5 9 80 年 提 出 :在 8 格 的 国 际象 棋上 摆放 8 皇后 ,使其 不 ×8 个 能 互相攻 击 , 即任 意两 个皇 后 都不 能处于 同一 行 、同一 列 或 同一 斜线 上 , 问有 多 少种摆 法 。高斯 认 为有7 种 方 6 案 。 l 5 年 在 柏 林 的 象 棋杂 志 上 不 同 的 作者 发 表 了4 84 0
te gn h nbe i
Q
i 当前状 态为最 佳 目标 状态 te 记 下最 f hn 优 结果 ; e i xt ; ed { e} n ; t n h { 值 t 算符 最大值 d o i o o
b gn e i
图1
1 . 分析 算法
就是 最佳 目标状 态 。因此 还须 增加 判别 最优 目标状 态 的 条件 。
P OCE E R K: E R ; 放第 k R DUR T Y( I NT GE ) { 列这个 皇
后}
V AR II : NTEGER; BEGI N I N+1T F K= HEN GI P NT; BE N RI EXI ND; TE F 0R I 1To N DO : : BEGI N
P OGR R AM UE N; Q E
CONS 8 T N= :
V AR ,, : l KI J NTEGER;
九 宫格 问题 :九 宫格游 戏 规则 , 1 这 九个数 字 , ~9
思考 怎么填 入 三行 三列 的方 格 中,要 求使 每行 、每 列 、 两 条对 角线 上 的数字之 和都 相等 。 九 宫格 这个游 戏不 仅仅 考验 人 的数 字推理 能力 ,也 同时考 验 了人 的思维 逻辑 能力 ,对 人们 的思维锻 炼有着 极 大 的作用 ,从 古 时起人 们便 意识 到九 宫 的教育 意义 。
的行位 置i 为搜索 范 围,即 1in 作 。 f1 5约束条 件和最 优性要 求 :所 谓约 束条件 是指 , 当 前扩 展 出一个 子结 点后应 满足 什么 条件 方可 继 续递 归下 去 ;如 果是 求满足 某个 特 定条 件 的一条 最佳 路径 ,那 么
在 扩展 出某 个子 状态 后是 否继 续递 归搜 索下 去 ,不仅 取 决于 子状态 是否 满足 约束 条件 ,而 且还 取决 于子 状态 是
W RI LN; TE COU T: =COUNT+1 N : 、
21年7 01 月
l SSN1 2 1 8 67 - 43
C1 9 , N1 91 4 4r
一
中国观代 装备
2 第4 0第 1 总年 期 1 1
16 2 期
共 有 9 X7 X5 ×3 ×1 3 2 8 种 填 ×8 ×6 ×4 ×2 = 6 80
( ) 体 设 计 思 路 :任 意2 皇 后 都 不 能 处 于 同一 1具 个
算符i 作用 于 当前状 态 ,扩 展 出一个子状 态 ;
行 、 同一列或 同一 斜线 上 ,所 以我们 从第 一列 开始放 , 看 看每 一列 的皇后 都放 在哪 一行 上就 可 以了 。所 有可 能
稿 件 编 号 :P 1 32 1017
种 不 同的解 ,后来 有人 用 图论 的方法 解 出9 种 结果 。可 2
以用 回溯 的算 法 求 出这9 种 结果 。 图 l 其 中 的一种 结 2 是 果。 ( Q表示 皇后 的位 置 )
Q
Q
Q
Q
i i t g r : ne e ; b gn e i
Q
i 当前 状 态 为 边 界 f
中国 装 观代 备
END;
SN 49.3 C171" S1 24 N1 94/18 6
-
的状况 。在 八皇后 问题 中 ,将 行位 置作 为状 态 。
() 界 条 件 : 即在 什 么 情 况 下 程 序 不 再 递 归 下 3边 去 。 在 八 皇 后 问题 中 ,将 等 于 n l ( 生 一 种 成 功 放 + 产 法 )作为边 界条 件 。如 果是求 满足 某个 特 定条件 的一条 最佳路 径 ,则 当前状 态 到达边 界 时并非 一定 意 味着 此 时
EN D ;
P OC D R E URET Y( L I E R ; R H,: NT GE )
、 R ,, I T IJF: N EGER;
BEGI N
() 条件 和最优 性要求 :约束 条件是 这个数 没有 4约束 被填过, 一个就填 上,然后填 下一个 位置(, 1 找到 1 +) l : l
SN 】 SN 】A I】 计算 \ 向对角 线 的和 ) [2: [ 2+ [I { = ,; 方
E ND ;
法 ,对于 每一种 填法 都验 证每 行 、每列 、对 角线 上的和 是不 是 等于 1 ,其 中有 8 填 法符 合 每行 、每列 、对 角 5 种 线之和 都等 于 1。 5 () 状态 :填 的第h ,第 lU 为状态 。 1 定义 行 Y作
l SSN1 2. 43 67 1 8
C14 4 N19 / _9T
中国 装备 观代
2 11 0第第期 总年24 1 6期 1
回溯 算法
王 凤 红
回溯 算 法 是 程 序 设 计 中 最 重 要 的基 础 算 法 之 一 , 也 是 搜 索算 法 中 的一 种 控 制 策 略 , 回溯 算 法 的基 本 思 想 是 : 从 一 条 路 往 前 走 , 能 进 则 进 , 不 能 进 则 退 回 来 ,选 择 另外 一 条 路 再 走 。 它 是 从初 始 状 态 出发 ,运 用 题 目给 出 的条 件 、规 则 , 按 照深 度 优 先 搜 索 的 顺序 扩 展所 有可 能 情 况 ,从 中 找 出满 足 题 意 要 求 的 解 答 。 回 溯 法 是求 解 特 殊 型 计 数 题 或较 复杂 的枚 举 题 中使 用
VAR II EGE :NT R;
BEGI N P LACE: TRUE; = F OR I=lTO K. : 1D0
一
. 1算法分 析 . 列 出所 有可 能 的情况 从 中找 出符合 条件 的解 。从第 行第 ~ 列开 始 ,找一 个还 没有 填过 的数 填上 ,然 后就 填 下 一个 。当所 有可 能 的填 法都试 验 完 了以后就 回溯 到 上 一个 数 ,试 验 还没 有填 过 的数 。直 到九个 格全 部填 完
然后变 换 到b ,再变 换 到C ……最后 一种 填法 是e 。
P CE RO DUR R N ; 打 印结果 } EP I T {
V AR :NT I I EGER; BEGI N
F = O N DO WRI E X[ :) ORI 1 T ( I4 ; : T ]
I X[ = K]OR( BSX[ - K] AB (- ) F( I X【 ) ] A ( I x[ ) ] = SIK)
T N P AC :F S ;{ 已经 放好 的k 1 HE L E= AL E 跟 . 个皇 后不 在 同一行跟 对角线 上 }
END;
之 后 ,验 证 是不 是符 合条 件 。第 一种 填法 是 图3 中的a ,
第 i ,不产生攻击 ( lc-re 行上 paet )作为 约束条件 。 -u
[ 问题 描述】
() 与递 归 运 算 的 参数 :将 参 与递 归 运 算 的 参 数 6参
设 为递 归子程 序 的值参 或局 部变 量 。若这 些参 数 的存储 量 大 ( 如数 组 )且初 始值 需 由主程序 传入 ,为避 免 内 例 存溢 出,则必 须将 其设 为全 局变量 ,且 回溯 前 需恢 复其 递 归前 的值 。在 八皇 后 问题 中 ,将 皇后 的列 作 为参 与递 归运算 的参 数 。 2程 序清单 .
千 百年来 影 响 巨大 ,在文 学 、影视 中都 曾出现过 。九 宫
格最 早 叫 “ 书 ”,现在 也 叫 “ 方 ”。 洛 幻
在 《 雕 英雄传 》 中黄 蓉 曾破 解 九宫格 , 口诀 :戴 射 九履 一 ,左三 右七 ,二 四有 肩 ,八六 为 足 ,五居 中央 ,
如 图2 示 。 所
C NTI GE OU : NE R;{ 存放 方案 总数 }
X: R Y[一 OF I E R x i 存放 第i AR A 1N】 NT GE ;{ [里 ] 列这 个 皇后放 在xi [ 这一行 上 } ]
F NC I P AC ( I E  ̄ : L AN; { U T ON L E K: NT GE BOO E 看 看第k 皇后 能不 能放 上 } 个
、
回溯算法说明
1 法定义 . 算 回溯算法 是搜 索算 法 中的一种 控制 策略 。它 在包含 问题 的所有 解 的解空 间树 中 ,按照深 度优 先 的策 略,从
根 结 点 出发 搜索 解空 间树 。算法 搜索 至解 空 间树 的任一
结点 时 ,总 是先 判断 该结 点是 否肯 定不包 含 问题 的解 , 如果肯 定不 包含 ,则 跳过对 以该结 点为根 的子 树 的系统 搜 索 ,逐层 向其 祖先 结点 回溯 。否则 进入 该子 树 ,继续 按 深度 优先 的策 略进 行搜索 。回溯算 法在 用来 求 问题 的 所 有解 时 ,要回溯 到 根 ,且 根 结点 的所有 子树 都 已被 搜 索遍 才 结束 。回溯 算 法在用 来求 问题 的任 一解 时 ,只 要 搜 索到 问题 的一个 解就 可 以结束 。这 种 以深 度优 先 的方 式 系统地 搜索 问题 的解 的算法称 为 回溯算法 。 2算法描 述 . 回溯算 法描 述如 下 : po e ue u ( rcd r n 当前状 态 ); r
的情 况全 部试 验一遍 ,找 出满足 条件 的9种 结果 。 2
() 2 定义 状态 :即如 何 描述 问题 求 解 过程 中每 一 步
作者简介 :王凤红 ,本科 ,中教 一级 。 作者单位 :山东省北镇 中学电教 中心。
2 1 年7 01 月
2 1年第1 期 01 4
总 1期 第2 6
(1 索 范 围 :在 当前 状 态 不满 足 边 界 条 件 的情 况 4搜
下 ,应 如何 设计算 符值 的范 围 。换句话 说 ,如何 设定 fr o 语句 中循环 变量 的初 值和 终值 。在 八皇 后 问题 中 ,每列
x【 :I K] ; = I L E  ̄ T N R K+ ) 放好 了第k FP AC ( HE T Y( I;{ 列这 个
皇 后 ,接着放 第k l 0 + Y 的皇后 }
END ; E ND ;
BE N GI
T Y() R 1;
W RI LN (” THE T ALI TE OT S” . COUN T) :
END.
否 满足最优 性要求 。在八皇 后 问题 中 ,将k 的皇后放 在 列
() 界条件 : 当h 3 - 说 明 已经填完 一种 方案 ; 2边 = ,14 () 索范 围:这9 数 ;li9 3搜 个 < ;
FOR I=lTO N2 D0 :
I [ o S FSq UM T E E I H N XT ;
CoUNT: COUNT+I P NT; ; RI
频率 最 高的一 种算 法 。
一
i( f 子状态满 足 约束条 件) n 子 状态 满足最 优性 要 a d( 求) e n子 状态 t nr ( h u ;
ed { r n; f } o e d { n n; r } u
二 、经典例题分析
【 问题描 述1
八皇 后 问题是 一个 古老 而著 名的 问题 ,是 回溯算法 的典型例 题 。该 问题 由l 世 纪 著名 的数学 家高 斯于 1 5 9 80 年 提 出 :在 8 格 的 国 际象 棋上 摆放 8 皇后 ,使其 不 ×8 个 能 互相攻 击 , 即任 意两 个皇 后 都不 能处于 同一 行 、同一 列 或 同一 斜线 上 , 问有 多 少种摆 法 。高斯 认 为有7 种 方 6 案 。 l 5 年 在 柏 林 的 象 棋杂 志 上 不 同 的 作者 发 表 了4 84 0
te gn h nbe i
Q
i 当前状 态为最 佳 目标 状态 te 记 下最 f hn 优 结果 ; e i xt ; ed { e} n ; t n h { 值 t 算符 最大值 d o i o o
b gn e i
图1
1 . 分析 算法
就是 最佳 目标状 态 。因此 还须 增加 判别 最优 目标状 态 的 条件 。
P OCE E R K: E R ; 放第 k R DUR T Y( I NT GE ) { 列这个 皇
后}
V AR II : NTEGER; BEGI N I N+1T F K= HEN GI P NT; BE N RI EXI ND; TE F 0R I 1To N DO : : BEGI N
P OGR R AM UE N; Q E
CONS 8 T N= :
V AR ,, : l KI J NTEGER;
九 宫格 问题 :九 宫格游 戏 规则 , 1 这 九个数 字 , ~9
思考 怎么填 入 三行 三列 的方 格 中,要 求使 每行 、每 列 、 两 条对 角线 上 的数字之 和都 相等 。 九 宫格 这个游 戏不 仅仅 考验 人 的数 字推理 能力 ,也 同时考 验 了人 的思维 逻辑 能力 ,对 人们 的思维锻 炼有着 极 大 的作用 ,从 古 时起人 们便 意识 到九 宫 的教育 意义 。
的行位 置i 为搜索 范 围,即 1in 作 。 f1 5约束条 件和最 优性要 求 :所 谓约 束条件 是指 , 当 前扩 展 出一个 子结 点后应 满足 什么 条件 方可 继 续递 归下 去 ;如 果是 求满足 某个 特 定条 件 的一条 最佳 路径 ,那 么
在 扩展 出某 个子 状态 后是 否继 续递 归搜 索下 去 ,不仅 取 决于 子状态 是否 满足 约束 条件 ,而 且还 取决 于子 状态 是
W RI LN; TE COU T: =COUNT+1 N : 、
21年7 01 月
l SSN1 2 1 8 67 - 43
C1 9 , N1 91 4 4r
一
中国观代 装备
2 第4 0第 1 总年 期 1 1
16 2 期
共 有 9 X7 X5 ×3 ×1 3 2 8 种 填 ×8 ×6 ×4 ×2 = 6 80
( ) 体 设 计 思 路 :任 意2 皇 后 都 不 能 处 于 同一 1具 个
算符i 作用 于 当前状 态 ,扩 展 出一个子状 态 ;
行 、 同一列或 同一 斜线 上 ,所 以我们 从第 一列 开始放 , 看 看每 一列 的皇后 都放 在哪 一行 上就 可 以了 。所 有可 能
稿 件 编 号 :P 1 32 1017