첫 번째 질문에 죄송합니다. 새 코드입니다 ... 코드를 정리했습니다. 문제는 : 경로와 장애물이있는 사각형 격자가 있습니다. 나는 한 점에서 다른 점까지 최단 경로를 찾고 싶다. 이것은 인공 지능의 일부입니다. 경로가 너무 크면 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).
당신이 그 엉망을 디버그하고 싶지 않다고 생각한다면, 우리가 어떻게 느끼는지 상상해보십시오. –
더 설명해야합니다. 무엇을 입력 했습니까? 어떤 반응을 기대 했습니까? 오류 메시지가 있다면 나타 났습니까? – lurker
'pos/2'는 다른 모든 부분에서 단지 술어가 아닌 functor를 의미하기 때문에'move/4'에서'pos/2'에 대한 모든 목표를 제거 할 수 있습니다. – false