我需要一个谓词路由,它可以为所有城市提供从开始&结束的所有城市。例如:查找所有可能的路径而不用重访
path(chicago,atlanta).
path(chicago,milwaukee).
path(milwaukee,detroit).
path(milwaukee,newyork).
path(chicago,detroit).
path(detroit, newyork).
path(newyork, boston).
path(atlanta,boston).
path(atlanta, milwaukee).
?- routing(chicago,newyork,X).
X=[chicago,milwaukee,newyork];
X=[chicago,detroit,newyork];
X=[chicago,milwaukee,detroit,newyork];
X=[chicago,atlanta,milwaukee,newyork];
X=[chicago,atlanta,milwaukee,detroit,newyork]
我试过这个,并不断回来。
routing(FromCity,ToCity,[FromCity|ToCity]) :-
path(FromCity,ToCity).
routing(FromCity,ToCity,[FromCity|Connections]) :-
path(FromCity,FromConnection),
path(FromConnection,ToConnection),
path(ToConnection,ToCity),
routing(ToConnection,ToCity,Connections).
routing(FromCity,ToCity,[]).
,但它只是不断给
X=[chicago,milwaukee,newyork];
X=[chicago,chicago,newyork];
X=[chicago,chicago,chicago,newyork]
...
..
可有一个人请点我在正确的方向...
您好,我有一个类似的问题,但我想用“写”函数写出来里面的路径所以我将不得不在函数中调用是开始和结束有没有什么办法来配置您的示例以使其工作? – Fjodor
@Fjodor:由于回溯,你无法可靠地写出路径。尝试在递归调用后写入(连接) – CapelliC