Je veux programmer ces algorithmes dans Prolog, et d'abord j'ai besoin de créer une matrice à partir d'une liste de graphes. Je l'ai fait avant (aussi avec l'aide de certains d'entre vous, les gars), mais maintenant je ne sais pas comment le stocker dans une liste de listes (ce qui je suppose que c'est la meilleure approche dans le cas de Prolog). Je pense que je peux être capable de continuer à partir de là (avec le triple pour boucle dans chacun des algorithmes). La logique du programme n'est pas difficile pour moi, mais comment travailler avec des données. Désolé d'être dérangé et merci d'avance!Les algorithmes de Floyd et Warshall dans Prolog
Mon générateur de matrice:
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.
Il semble que ce que vous voulez, c'est [la matrice d'adjacence] (http://en.wikipedia.org/wiki/Adjacency_matrix) du graphique. Je mentionne cela parce qu'il y a une autre matrice souvent utilisée dans la représentation graphique appelée matrice d'incidence. La matrice d'adjacence indique quand deux nœuds partagent un bord, tandis que la matrice d'incidence montre quels nœuds sont remplis par quels bords. La matrice d'adjacence pour un graphe simple est symétrique avec seulement des zéros sur la diagonale (les noeuds ne sont pas adjacents à eux-mêmes). Je peux vous aider avec cela, même si je ne suis pas sûr de l'importance de la mise en œuvre de Floyd-Warshall. – hardmath
la matrice d'adjacence est exactement ce dont j'ai besoin; __ ;! – Kirby