返回最短路径,在prolog中使用广度优先搜索

时间:2010-12-11 12:21:59

标签: graph path prolog shortest

我想在双向图中找到从A站到B站的最短路径(如果A连接到B而B连接到A),图表在分支上没有权重。问题就像这样发布了 解决(开始,结束,路径)。
启动站。
终点目的地站。
路径 - 以最短路径传递的所有站的列表。图中任意两个直接连接的站之间的距离相等。 基地的事实是这样的:
事实( “Staion1”, “metroline”, “站2”, “metroline”)。
metro line是直接连接两个staions的线路数。如果第2和第4个参数相同,则直接连接站。

线( “abbesses的”, “12”, “皮嘉尔”, “12”)。
线(“Abbesses”,“12”,“Lamarck Caulaincourt”,“12”) 线(“Ale'sia”,“4”,“Mouton Duvernet”,“4”) line(“Ale'sia”,“4”,“Porte d'Orle'ans”,“4”) (“Alexandre Dumas”,“2”,“Philippe Auguste”,“2”) 线(“Alexandre Dumas”,“2”,“Avron”,“2”) 线(“Alma Marcesu”,“9”,“Ie'na”,“9”)。

编辑: 我试图解决这个问题,并且我发现如果使用BFS它会更快 这是我写的解决方案:
解决(开始,结束,路径): - 。solve1([开始],结束,[开始],路径)

solve1([P | O],结束,访问,[结束?|]): - 儿童(P,S),构件(完,S),
solve1([P | O],结束,访问,路径): -
(未(构件(P,访问)),儿童(P,S),追加(O,S,O1),solve1(O1 ,结束,访问,路径));
(solve1(O,结束,访问,路径))。
? - 应该是包含目标节点的路径的列表 唯一的问题是我不知道如何将路径返回到目标节点 谢谢你的提前。

1 个答案:

答案 0 :(得分:0)

你可以使用Dijkstra的算法。

http://en.wikipedia.org/wiki/Dijkstra“s_algorithm