1

私は次のような都市間の接続を持っています

connection(London,Sziget).
connection(Sziget,Kairo).

そのため、最初に他の都市を通過しても、2 つの都市間に可能なルートがあるかどうかを調べる述語を作成したいと考えています。

Input example: route(London,Kairo).
       result: true

この時点まで、機能するこの再帰コードを作成しました。

route(W,Z):-connection(W,Z).
route(W,Z):-connection(W,Y),route(Y,Z).

しかし、2 つの都市間のコストが 100 で、通過する他の都市ごとに 50 以上の場合、ルートの総コストも計算したいと思います。

Input example: route(London,Kairo).
       result: true 150

どんな助けでも感謝します。

4

1 に答える 1

0

あなたの費用は次のようですね: 100 + 中間都市ごとに 50?

その場合、次のようなものが必要です

route(W, Z, 100) :- connection(W, Z).
route(W, Z, Cost) :- connection(W, Y), route(Y, Z, Cost2), Cost is Cost2+50.

直接リンクが見つかると 100 と評価されるか、中間を経由する必要があるたびにコストに 50 が追加されます。

その場合、あなたの入力は

route(London, Kairo, Cost).

結果は

Cost = 150

これは、ルートが見つかったことを意味します。実際に「真」の部分が必要な場合は、少しトリッキーになります。

于 2014-11-28T18:13:55.560 に答える