【发布时间】:2023-01-23 18:12:03
【问题描述】:
我想知道如何获得连接最少的路径,而不是连接值总和最小的路径。我的知识是:
edge (vertex1, vertex2, value).
谓词应返回路径和连接数。
我有这个谓词,但它计算连接之间的最小值的路径,而不是连接本身的数量。
path(X,Y,[X,Y],L):-
edge(X,Y,L).
path(X,Y,[X|W],L):-
edge(X,Z,L1),
path(Z,Y,W,L2),
L is L1 + L2.
shortestPath(X,X,[X,X],0):- !.
shortestPath(X,Y,MinP,MinD):-
findall([L,P],path(X,Y,P,L),Set),
sort(Set,Sorted),
Sorted = [[MinD,MinP]|_].
%
有任何想法吗?
编辑
我对代码进行了一些更改,但不知道为什么它不起作用
path(X,Y,[X,Y],L):-
edge(X,Y,L),
L is 1.
path(X,Y,[X|W],L):-
edge(X,Z,L1),
path(Z,Y,W,L2),
L is L2 + 1.
shortestPath(X,X,[X,X],0):- !.
shortestPath(X,Y,MinP,MinD):-
findall([L,P],path(X,Y,P,L),Set),
sort(Set,Sorted),
Sorted = [[MinD,MinP]|_].
%
我的知识库是
edge(1,2,10).
edge(1,3,1).
edge(3,2,1).
我想要这个 shortestPath(1,2,X,Y)。给我直接路径 1 -> 2 但我仍然得到 1 -> 3 -> 2。
有人可以帮帮我吗?
【问题讨论】:
标签: prolog graph-theory