You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Prolog回溯法的图路径查找及指定格式输出实现问题

Prolog图路径查找回溯输出实现方案

核心思路

要实现要求的输出格式,需要满足两个核心逻辑:

  • 遍历过程中每成功匹配一条边时,立即打印该边的节点跳转信息,回溯过程不撤销已打印的内容,即可完整输出所有路径尝试过程
  • 遍历过程中记录已访问的节点,避免成环导致无限递归

完整实现代码

首先是给定的图的事实定义:

maniere(v11,h11).
maniere(h11,v12).
maniere(h11,h21).
maniere(v12,v22).
maniere(v22,h13).
maniere(v22,h23).
maniere(h13,v21).
maniere(v22,h23).
maniere(h12,h22).
maniere(h23,v23).
maniere(h33,v23).
maniere(v13,h32).
maniere(v23,h32).

然后是路径遍历谓词的实现:

% 入口谓词,传入起点和终点
traverser(Start, End) :-
    traverse_helper(Start, End, [Start]),
    % 可选:加cut! 找到第一个解后直接终止,无需用户手动输入回车结束查询
    !.

% 辅助谓词:当前节点等于终点,匹配成功
traverse_helper(End, End, _Visited).
% 辅助谓词:未到终点,继续向后遍历
traverse_helper(Current, End, Visited) :-
    % 匹配当前节点的后继节点
    maniere(Current, Next),
    % 打印当前跳转路径
    format('~w to ~w~n', [Current, Next]),
    % 校验节点未被访问过,避免成环
    \+ member(Next, Visited),
    % 递归遍历下一个节点,更新已访问列表
    traverse_helper(Next, End, [Next|Visited]).

运行效果

调用traverser(v11, v23).查询时,输出结果完全符合要求:

?- traverser(v11, v23).
v11 to h11
h11 to v12
v12 to v22
v22 to h13
h13 to v21
v22 to h23
h23 to v23
true.

内容的提问来源于stack exchange,提问作者Lanserlor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:45:05