이 알고리즘을 Prolog에서 프로그래밍하고 싶습니다. 그리고 먼저 그래프 목록에서 행렬을 만들어야합니다. 나는 (여러분 중 몇몇의 도움을 받아) 전에 이것을했는데, 이제 목록의 목록에 그것을 저장하는 방법을 모른다 (나는 프롤로그의 경우에 가장 좋은 방법이라고 생각한다). 나는 거기에서 계속할 수 있다고 생각한다. (각각의 알고리듬에서 3 중 반복을 사용한다.) 프로그램의 논리는 나를 위해 어렵지는 않지만 데이터로 작업하는 방법입니다. 귀찮게하고 미리 감사드립니다.플로이드와 Warshall의 알고리즘 Prolog에서
내 행렬 생성기 :
graph(a,b).
graph(a,a).
graph(b,c).
graph(b,d).
graph(c,d).
graph(a,e).
graph(e,f).
matrix :- allnodes(X),printmatrix(X).
node(X) :- graph(X,_).
node(X) :- graph(_,X).
allnodes(Nodes) :- setof(X, node(X), Nodes).
printedge(X,Y) :- graph(Y,X), write('1 ').
printedge(X,Y) :- \+ graph(Y,X), write('0 ').
printmatrix(List):- member(Y, List),nl,member(X, List),printedge(X,Y),fail.
원하는 그래프는 [인접 행렬] (http://en.wikipedia.org/wiki/Adjacency_matrix)입니다. 왜냐하면 다른 행렬이 흔히 발생률 행렬이라고하는 그래프 표현에 사용되기 때문입니다. 인접 행렬은 두 노드가 모서리를 공유하는시기를 나타내며, 입사 행렬은 어느 노드가 어느 모서리를 충족시키는지를 나타냅니다. 간단한 그래프의 인접 행렬은 대각선의 0 점만으로 대칭입니다 (노드는 인접하지 않습니다). Floyd-Warshall을 구현하는 것이 얼마나 중요한지는 잘 모르겠지만 그 점을 도와 드릴 수 있습니다. – hardmath
인접성 매트릭스가 정확히 내가 원하는 것입니다; __ ;! – Kirby