查找两个地点之间是否存在连接并计算成本

时间:2014-11-27 23:29:30

标签: recursion prolog transitive-closure

我在城市之间有联系,比如

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

任何帮助表示感谢。

1 个答案:

答案 0 :(得分: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

这意味着找到了一条路线。如果你真的需要'真实'部分,那将会有点棘手。