双方向グラフのプロローグで駅Aから駅Bへの最短ルートを見つけたいと思います(AがBに接続されている場合、BがAに接続されている場合)、グラフには枝に重みがありません。質問はこのように投稿されます
solve(Start,End,Path).
始発駅。
終着駅。
最短ルートで通過したすべてのステーションのパス リスト。グラフ内の任意の 2 つの直接接続ステーション間の距離は等しくなります。実際、ベースは次のようになります。
fact("Staion1","metroline","Station2","metroline").
地下鉄路線は、2 つの駅を直接結ぶ路線の数です。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)).
?-宛先ノードへ
のパスを含むリストである必要があります 唯一の問題は、宛先ノードへのパスを返す方法がわからないことです。
ありがとうございます。