我正在尝试解决 OCaml 中的谜题 15 游戏。我几乎什么都做了。。除了程序的核心功能,深度优先搜索功能。这就是我的函数现在的样子:
let df_search_path (Graph next) start =
let rec from_node visited a =
print(a);
if List.mem a visited then raise Fail
else if goal(a) then [a]
else a::from_list (a::visited) (next a)
and from_list visited nextA = match visited with
[] -> raise Fail
| nextA::rest -> try from_node visited nextA
with Fail -> from_list visited rest
in from_node [] start;;
Graph
是一个图,next
是一个搜索 2,3 或 4 个下一步移动的函数(我移动空白区域),goal
是一个检查当前a
状态是否是目标并且Fail
是正常异常的函数。
我尝试了很多其他功能,它们运行良好。
这个函数总是在起始状态无限循环,我不明白为什么。
print
是一个自定义函数,以友好的形式打印状态a
。
我究竟做错了什么?我正在使用远离解决方案的状态“1 move”进行测试,只需“go down”即可解决此问题..但它卡在第一个状态,总是打印开始配置!