【发布时间】:2010-04-01 22:22:06
【问题描述】:
我的 turbo prolog 代码在我的代码中存在问题,它在 2 个节点之间的图中搜索所有路径和最短路径。 我遇到的问题是测试节点是否在列表中(正好在成员的子句中)
1 ---- b ---- 3
--- | ---
--- | -----
a |5 d
--- | -----
--- | ---
2 --- | --- 4
-- c --
for example we have for b--->c
([b,c],5) , ([b,a,c],3) and ([b,d,c],7) : possible paths.
([b,a,c],3) : the shortest path.
这是我的代码:
DOMAINS
list=Symbol *
PREDICATES
distance(Symbol, Symbol)
path1(Symbol, Symbol, list, integer)
path(Symbol, Symbol,list, list, integer)
distance(Symbol, list, integer)
member(Symbol, list)
shortest(Symbol, Symbol, list, integer)
CLAUSES
distance(a, b, 1).
distance(a, c, 2).
distance(b, d, 3).
distance(c, d, 4).
distance(b, c, 5).
distance(b, a, 1).
distance(c, a, 2).
distance(d, b, 3).
distance(d, c, 4).
distance(c, b, 5).
member(X, [X|T]).
member(X, [Y|T]) :- member(X, T).
absent(X, L) :-
member(X, L),
!,
fail.
absent(_, _).
/* find all paths */
path1(X, Y, L, C) :- path(X, Y, L, I, C).
path(X, X, [X], I, C) :- absent(X, I).
path(X, Y, [X|R], I, C) :-
distance(X, Z, A),
absent(Z, I),
path(Z, Y, R, [X|I], C1),
C = C1 + A
.
/* to find the shortest path */
shortest(X, Y, L, C) :-
path(X, Y, L, C),
path(X, Y, L1, C1),
C < C1.
【问题讨论】:
-
你没有说明你的问题是什么。
标签: prolog graph-theory shortest-path turbo-prolog