我想在双向图中的序言中找到从 A 站到 B 站的最短路线(如果 A 连接到 B,而不是 B 连接到 A),该图在分支上没有权重。问题是这样发布的
solve(Start,End,Path).
始发站。
终点站。
路径最短的所有站点的路径列表。图中任意两个直接相连的站点之间的距离相等。事实上,基地是这样的:
fact("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 会更快。
这是我写的解决方案:
solve(Start,End,Path):-solve1([Start],End,[Start],Path).
solve1([P|O],End,Visited,[End|?]):-children(P,S),member(End,S),!.
solve1([P|O],End,Visited,Path):-(not(member(P,Visited)),children(P,S),append(O,S,O1),solve1(O1,End,Visited,Path));
(solve1(O,End,Visited,Path)).
?-应该是到目标节点
的路径列表唯一的问题是我不知道如何返回到目标节点的路径。
谢谢在前面。