대상 노드에 도달 할 수있는 조합 수를 계산할 때 도움이 필요합니다.프롤로그 프로그램에서 두 노드 사이의 경로 수를 계산하십시오.
다른 경로를 찾는 프로그램을 찾았습니다. 그러나 결국 일부 쿼리가 필요합니다.
%Edge List (Knowledge Base)
edge(1,2).
edge(1,4).
edge(2,4).
edge(3,6).
edge(3,7).
edge(4,3).
edge(4,5).
edge(5,6).
edge(5,7).
edge(6,5).
edge(7,5).
edge(8,6).
edge(8,7).
%Program
path(X,Y,[X,Y]):- edge(X,Y).
path(X,Y,[X|Xs]):- edge(X,W), path(W,Y,Xs).
-------------------------------------------------
%Query
path(1, 7, P).
%Results
Z = [1, 2, 4, 3, 6, 5, 7];
Z = [1, 2, 4, 3, 6, 5, 6, 5, 7];
.........................
그러나 이러한 경로의 번호를 알려주는 쿼리를 실행하려면 어떻게해야합니까?
path(X,Y,L):-path(X,Y,L,[X]).
path(X,Y,[X,Y],L):- \+member(Y,L),edge(X,Y).
path(X,Y,[X|Xs],L):- edge(X,W),\+ member(W,L) ,path(W,Y,Xs,[W|L]).
을 이제 : 모든
?-path(1, 7, count).
should return 2
음, 너 뭐 해봤 니? –
재귀 단계를 세어 보았습니다. 그러나 결과는 예상대로되지 않습니다. move2 (X, Y, N) : - N은 N + 1, edge (X, Y)입니다.move2 (X, Y, N) : - N은 N + 1, edge (X, Z), move2 (Z, Y, N)입니다. – confucious
'N은 N + 1'입니까? 그건 말이 안되요. –