1

我在城市之间有联系

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

所以我想创建一个谓词来查找两个城市之间是否有可能的路线,甚至首先经过其他城市。

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

到目前为止,我已经创建了这个有效的递归代码。

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

但我也想计算路线的总成本,如果两个城市之间的成本是 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 回答