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

我想在双向图中找到从站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,结束,访问,路径))。 ? - 应该是包含目标节点路径的列表 唯一的问题是我不知道如何返回到目标节点的路径。 谢谢你的未来。     
已邀请:
你可以使用Dijkstra的算法。 http://en.wikipedia.org/wiki/Dijkstra's_algorithm     

要回复问题请先登录注册