PROLOG:具有最少连接的图形路径
PROLOG: Graph path with minimum connections
我想知道如何获得连接最少的路径,而不是连接值总和最小的路径。我的知识是:
edge (vertex1, vertex2, value).
谓词应该return路径和连接数。
我有这个谓词,但它计算的是连接之间具有最小值的路径,而不是连接数本身。
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.
有人能帮帮我吗?
如果最小连接数是指最短路径,快速解决方法是修复总和而不是计算重量而是计算长度。但是,有更好的方法可以找到没有 findall/3
.
的最短路径
无论如何,您会很容易找到大量最短路径的示例。
我想知道如何获得连接最少的路径,而不是连接值总和最小的路径。我的知识是:
edge (vertex1, vertex2, value).
谓词应该return路径和连接数。
我有这个谓词,但它计算的是连接之间具有最小值的路径,而不是连接数本身。
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.
有人能帮帮我吗?
如果最小连接数是指最短路径,快速解决方法是修复总和而不是计算重量而是计算长度。但是,有更好的方法可以找到没有 findall/3
.
无论如何,您会很容易找到大量最短路径的示例。