Shortest path in prolog

Started by
0 comments, last by LordG 21 years, 5 months ago
Here are some example facts, where the first two letters represents the end points of a line and the number represents the length of that line. line(a,b,10). line(a,d,7). line(a,e,13). line(a,c,4). line(b,d,23). line(b,e,5). Now I want to write a query to find an end point closest to "a" (basically the shortest line with "a" as one of the end points). I can''t seem to think of a way of doing this, but eventually searching through the net, I found a solution, which I modifed to this: line(a,X,Length1), \+(( line(a,Y,Length2), Length2 < Length1 )). This query works perfectly, and it will display only one answer: X = c. However, I do not understand why this works... If we take Length1 = 7 and Length2 = 13, then shouldn''t this also work and return X = d. But the query only seems to display one answer and that is X = c. Why? Anyone who is an expert in prolog please explain this to me, cause this is driving me nuts. Thanks.
Advertisement
quote:Original post by LordG
line(a,X,Length1), \+(( line(a,Y,Length2), Length2 < Length1 )).


Note that predicate \+ is negation. This whole query will succeed only if no vertex Y can be found that would be closer than X.

This topic is closed to new replies.

Advertisement