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

Prolog技术需求:实现返回起点到目标节点路径列表的path谓词

改进Prolog的path谓词以返回路径节点列表

基于你提供的link谓词定义,我们可以扩展出能返回完整路径节点列表的path谓词,既支持判断指定起点终点的路径,也支持生成所有合法的路径。

完整代码实现

% 节点连接定义
link(1,2).
link(2,3).
link(3,4).
link(3,6).
link(6,7).
link(6,5).

% 核心路径谓词:path(起点, 终点, 路径列表)
% 终止条件:起点与终点相同,路径仅包含该节点
path(Start, Start, [Start]).
% 递归逻辑:从起点出发到下一个节点,再递归找到下节点到终点的路径,拼接成完整路径
path(Start, End, [Start|RestPath]) :-
    link(Start, NextNode),
    path(NextNode, End, RestPath),
    % 避免路径循环(可选,若图存在环时必须保留)
    \+ member(Start, RestPath).

% 生成任意有效路径的谓词:path(路径列表)
% 要求路径长度至少为2(排除单个节点的情况)
path(Path) :-
    path(Start, End, Path),
    Start \= End.

使用示例

  • 验证指定路径是否存在:
    ?- path([2,3,6,5]).
    true.
    
  • 生成所有有效路径:
    ?- path(L).
    L = [1,2,3,4] ;
    L = [1,2,3,6,7] ;
    L = [1,2,3,6,5] ;
    L = [2,3,4] ;
    L = [2,3,6,7] ;
    L = [2,3,6,5] ;
    L = [3,4] ;
    L = [3,6,7] ;
    L = [3,6,5] ;
    L = [6,7] ;
    L = [6,5] ;
    false.
    

说明

  • 代码中的\+ member(Start, RestPath)用于避免路径出现循环(比如如果图中有环,不会无限递归),如果你的图确定是无环的,可以去掉这一行以提升效率。
  • path/1谓词过滤了单个节点的情况,确保返回的都是至少包含两个节点的有效路径,符合你给出的示例格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:08