pascal 回溯 拼木条 问题 求解析 要详细

如题所述

第1个回答  2013-01-13
一、回溯法的基本思想
回溯法又称试探法。回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。
回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。
具体说,就是:在搜索(依次用各种方法一一去试探)的过程中,当在P点有N种选择,则从第一种开始尝试,若第K种可行,即这一步搜索成功,打上标记,再向前(即 P+1点)搜索;如在P点搜索失败(所有的方法都试探过,没有一种可行),为了摆脱当前的失败,就返回搜索进程中的上一点(即P-1点),再用第K+1种方法(假设上次在P-1点用第K种方法搜索成功,必须明确以前用过的方法不能再用,否则会陷入死循环)再去搜索,重新寻求解答。这样搜索回溯,再搜索再回溯,如能搜索到终点,问题有解,如最后回溯到出发点,问题就无解。

这种在搜索的过程中,先对深度大的点进行扩展的算法,叫深度优先搜索法。
设搜索深度指针为P,搜索方法指针为I,可把深度优先搜索算法写成如下形式:
P:=0;I:=0;
repeat
I:=I+1; (搜索到一种方法)
IF 搜索方法有效 THEN
begin
试探产生临时新结点
IF 符合条件 THEN
begin
P:=P+1;(深入一步),新结点记录,I:=0,再全方位搜索
IF到达终点 THEN 结束搜索,输出结果;
End;
End
ELSE (搜索的方法无效)
begin
I:=上次搜索的方法(下一轮将用I的下一方法去搜索);P:=P-1(后退一步返回上结点);
END;
UNTIL P=0;
IF P=0 THEN {深度指针P为0,表示已退到起始状态,是本题无解的标}
无解
ELSE
输出结果;
END.

太长了,放不下。要的话可以吧课件给你。追问

我知道回溯 我是说对于拼木条这道题要怎么做 我的方法超时

追答

你给程序我看看吧。

追问

发给你了

追答

没有啊?

相似回答