返回最短路径,在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,结束,访问,路径))。
? - 应该是包含目标节点路径的列表
唯一的问题是我不知道如何返回到目标节点的路径。
谢谢你的未来。
没有找到相关结果
已邀请:
1 个回复
系漏