穿越房间

时间:2018-11-05 03:03:43

标签: prolog

我对于path_to_phone(1,16,Path)一直是错误的。并且无法找出错误在代码中的位置。

array([300, 480, 506])

2 个答案:

答案 0 :(得分:1)

从美学的角度来看,它看起来像这样更好:

move(Start, End, Visit, Path) :- rooms_connected(Start, Middle), 
                                  End \== Middle, 
                                  \+member(Middle, Visit), 
                                   move(Middle, End, [Middle|Visit], Path).

问题在于您对rooms_connected的定义,因为它强制双向建立连接。如果那是您想要的目的,则必须将其放入文件门(15,14)和其他文件中,因为到目前为止,它无法找到路径。 如果没有,您可以将其更改为:

rooms_connected(X, Y) :- door(X, Y); door(Y, X).

这意味着门(X,Y)或门(Y,X)。

答案 1 :(得分:0)

我认为应该更简单,无需绕开令人困惑的中间语:

path_to_phone(Start, End, Path) :- 
    move(Start, [Start], [End|RPath]), 
    reverse([End|RPath], Path).

move(From, Visit, [Phone|Visit]) :- 
    door(From, Phone),
    phone(Phone).

move(From, Visit, Path) :-
    door(From, Next),
    \+memberchk(Next, Visit),
    move(Next, [Next|Visit], Path).