首页 文章

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

提问于
浏览
1

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

line("Abbesses","12","Pigalle","12") .
line("Abbesses","12","Lamarck Caulaincourt","12") .
line("Ale'sia","4","Mouton Duvernet","4") .
line("Ale'sia","4","Porte d'Orle'ans","4") .
line("Alexandre Dumas","2","Philippe Auguste","2") .
line("Alexandre Dumas","2","Avron","2") .
line("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 回答

相关问题