對不起,第一個問題,我是全新的......我對代碼進行了清理。問題是: 我有一個方形網格,包含路徑和障礙物。我想找到從一個點到另一個點的最短路徑。這是人工智能的一部分。當路徑太大時,我看不到bash上的所有點,但是在遊戲中,這個路徑上的角色不是最短路徑。所以,我的問題是,我如何改變這個代碼來解決最短路徑。非常感謝!使用序言的網格中的最短路徑
mov(X1,Y1,X2,Y2):-
pos(X1,Y1), X2 is X1 , Y2 is Y1+1 ,pos(X2,Y2).
mov(X1,Y1,X2,Y2):-
pos(X1,Y1), X2 is X1 , Y2 is Y1-1 ,pos(X2,Y2).
mov(X1,Y1,X2,Y2):-
pos(X1,Y1), X2 is X1+1 , Y2 is Y1 , pos(X2,Y2).
mov(X1,Y1,X2,Y2):-
pos(X1,Y1), X2 is X1 -1 , Y2 is Y1 , pos(X2,Y2).
path(X1,Y1,X2,Y2,Path) :-
travel(pos(X1,Y1),pos(X2,Y2),[pos(X1,Y1)],Q),
reverse(Q,Path).
travel(pos(X1,Y1),pos(X2,Y2),P,[pos(X2,Y2)|P]) :-
mov(X1,Y1,X2,Y2).
travel(pos(X1,Y1),pos(X2,Y2),Visited,Path) :-
mov(X1,Y1,X,Y),
pos(X,Y) \== pos(X2,Y2),
\+member(pos(X,Y),Visited),
travel(pos(X,Y),pos(X2,Y2),[pos(X,Y)|Visited],Path).
如果您認爲您不想調試那些混亂,請想象我們的感受。 – 2014-11-02 05:30:29
你需要進一步解釋。你輸入了什麼?你期望什麼反應?出現什麼錯誤信息(如果有)? – lurker 2014-11-02 12:14:09
在'mov/4'中,你可以刪除所有'pos/2'的目標,因爲在所有其他部分中,pos/2只是作爲函數而不是謂詞。 – false 2014-11-02 13:57:56