gpt4 book ai didi

list - 打印图的指定节点的图的所有循环,Prolog

转载 作者:行者123 更新时间:2023-12-05 00:57:19 25 4
gpt4 key购买 nike

我是 Prolog 世界的新手。我正在尝试编写谓词以打印图形的指定节点的所有循环,这是给定节点的元素。我的图表看起来像这样。

edge(a,e).
edge(e,d).
edge(d,c).
edge(c,b).
edge(b,a).
edge(d,a).
edge(e,c).
edge(f,b).

cycle(X) :-
cycle(X, []).

cycle(Curr, Visited) :-
member(Curr, Visited),
!.
cycle(Curr, Visited) :-
edge(Curr, Next),
cycle(Next, [Curr|Visited]).

不幸的是,现在我找不到特定节点的周期。例如,我正在寻找节点 d 的所有周期.

最佳答案

您正在寻找的声音类似于 对我来说......不需要重新发明轮子!

只需建立在“Definition of a path/trail/walk ”中显示的久经考验的代码上并定义:

in_cycle(R_2, AZ, Path) :- % cf. "simple cycle "
第一 = AZ,
最后 = AZ,
path (R_2, Path, First, ButLast), % 除最后一个之外的所有“跳跃”...
call (R_2, ButLast, Last)。 % ...这是最后一个

示例查询 #1 使用 SICStus Prolog 4.3.2:

| ?- in_cycle(edge, d, Path)。
路径 = [d,c,b,a,e] ? ;
路径 = [d,a,e] ? ;


在示例查询 #2 中,我们查看 symmetric closure 的传递闭包的 edge/2 :

| ?- in_cycle( symm (边), d, 路径)。
路径 = [d,c] ? ;
路径 = [d,c,b,a] ? ;
路径 = [d,c,b,a,e] ? ;
路径 = [d,c,e] ? ;
路径 = [d,c,e,a] ? ;
路径 = [d,a] ? ;
路径 = [d,a,e] ? ;
路径 = [d,a,e,c] ? ;
路径 = [d,a,b,c] ? ;
路径 = [d,a,b,c,e] ? ;
路径 = [d,e] ? ;
路径 = [d,e,c] ? ;
路径 = [d,e,c,b,a] ? ;
路径 = [d,e,a] ? ;
路径 = [d,e,a,b,c] ? ;


查询#1 的所有解决方案也满足更一般的查询#2——单调序言1 , 2 , 3在上类:)

关于list - 打印图的指定节点的图的所有循环,Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34796664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com