我想在Prolog中编写这些算法,首先我需要从图表列表中创建一个矩阵。我之前已经做到了这一点(同时在你们中的一些人的帮助下),但现在我不知道如何将它存储在列表列表中(我认为这是prolog最好的方法)。我想我可以从那里继续(在每个算法中使用三重for循环)。程序的逻辑对我来说并不困难,但是如何处理数据。对不起,先打扰一下,谢谢!Floyd和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)。我提到这是因为在图表示中常常使用另一个矩阵,称为关联矩阵。邻接矩阵告诉两个节点何时共享边,而关联矩阵表明哪些节点由哪些边满足。简单图的邻接矩阵是对称的,对角线上只有零点(节点不与它们相邻)。我可以帮你解决这个问题,但我不确定实施弗洛伊德 - 沃沙尔会有多么重要。 – hardmath 2011-05-03 15:42:00
邻接矩阵正是我所需要的; __ ;! – Kirby 2011-05-04 02:42:08