Loops Prolog迷宫停止循环
我已经设法拼凑出一个脚本,它通过所有的链接显示给我,但我似乎不明白为什么有一个链接,整个脚本循环到无穷远。如果删除下面的链接,程序将正常工作Loops Prolog迷宫停止循环,loops,prolog,maze,Loops,Prolog,Maze,我已经设法拼凑出一个脚本,它通过所有的链接显示给我,但我似乎不明白为什么有一个链接,整个脚本循环到无穷远。如果删除下面的链接,程序将正常工作 link(f,c). 下面是完整脚本的代码 link(a,b). link(a,b). link(b,c). link(c,d). link(f,c). link(b,e). link(d,e). link(e,f). path(X,Y,[X,Y]):-link(X,Y). path(X,Y,[X|R]):-link(X,Z),path(Z,Y,R)
link(f,c).
下面是完整脚本的代码
link(a,b).
link(a,b).
link(b,c).
link(c,d).
link(f,c).
link(b,e).
link(d,e).
link(e,f).
path(X,Y,[X,Y]):-link(X,Y).
path(X,Y,[X|R]):-link(X,Z),path(Z,Y,R).
route(X,Y,T):-find_route(X,Y,[],T).
find_route(X,Y,D,[Z|T]):-path(X,Y,Z),not(member(Z,D)),
find_route(X,Y,[Z|D],T).
find_route(_,_,_,[]).
看起来它当前将数组中的值与links值匹配,然后比较从a到f的路径,然后检查通过的值并将其显示在控制台上这是没有linkf,c的。如果有人知道我经历了什么,请告诉我
谢谢链接f,c正在有效地关闭定向循环c->d->e->f->c。因此,在路径X,Y,Z上,X和Y属于这个循环的任何回溯都会产生越来越长的路径。因此,您应该在路径规则中添加一个检查,以避免已访问的节点。删除无用的路径/3。。。