gpt4 book ai didi

prolog - 如何处理 Prolog 图形遍历中的路径

转载 作者:行者123 更新时间:2023-12-05 04:16:31 25 4
gpt4 key购买 nike

我在序言中写过:

edge(x, y).
edge(y, t).
edge(t, z).
edge(y, z).
edge(x, z).
edge(z, x).

path(Start, End, Path) :-
path3(Start, End, [Start], Path).

path3(End, End, RPath, Path) :-
reverse(RPath, Path).
path3(A,B,Path,[B|Path]) :-
edge(A,B),
!.
path3(A, B, Done, Path) :-
edge(A, Next),
\+ memberchk(Next, Done),
path3(Next, B, [Next|Done], Path).

它也处理循环图,当我尝试从同一节点遍历同一节点时得到不规则输出。

例如:path(x,x,P).预期输出应该是:

P = [x, z, t, y, x]
P = [x, z, y, x]
P = [x, z, x]

但是,我得到的输出是:

p = [x]             ------------> wrong case
P = [x, z, t, y, x]
P = [x, z, y, x]
P = [x, z, x]

我怎样才能摆脱这种不需要的情况。谢谢

最佳答案

我们使用 path/4edge/2 一起:

?- path(edge,Path,x,Last), edge(Last,x).  Last = z, Path = [x,y,t,z]; Last = z, Path = [x,y,z]; Last = z, Path = [x,z]; false.

Alright! Above three answers are exactly what the OP wished for in the question.

Just for fun let's look at all possible paths based on edge/2!

?- path(edge,Path,From,To).
From = To , Path = [To]
; From = x, To = y, Path = [x,y]
; From = x, To = t, Path = [x,y,t]
; From = x, To = z, Path = [x,y,t,z]
; From = x, To = z, Path = [x,y,z]
; From = y, To = t, Path = [y,t]
; From = y, To = z, Path = [y,t,z]
; From = y, To = x, Path = [y,t,z,x]
; From = t, To = z, Path = [t,z]
; From = t, To = x, Path = [t,z,x]
; From = t, To = y, Path = [t,z,x,y]
; From = y, To = z, Path = [y,z]
; From = y, To = x, Path = [y,z,x]
; From = x, To = z, Path = [x,z]
; From = z, To = x, Path = [z,x]
; From = z, To = y, Path = [z,x,y]
; From = z, To = t, Path = [z,x,y,t]
; false.

关于prolog - 如何处理 Prolog 图形遍历中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27264813/

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