prolog中的邻接矩阵

时间:2011-03-27 21:54:55

标签: prolog

我需要创建一个邻接矩阵,其中图形顶点表示为事实: e.g。

graph(a,b).
graph(c,c).
graph(b,c).

我需要输出矩阵:

0 1 0
0 0 1
0 0 1

我知道我应该为每一行列出一个列表,但是当它们是符号而不是数字时会出现问题,所以我不知道如何知道该列表的大小(例如,如果有图表(如果有的话) e,f)。列表必须是六个数字,所以f可以适合)。我不想要完整的答案,如果你只是想告诉我一个如何做的草图,我想我会没事的。

2 个答案:

答案 0 :(得分:4)

获取所有节点的列表:

node(X) :- graph(X,_).
node(X) :- graph(_,X).
allnodes(Nodes) :-
    setof(X, node(X), Nodes). % removes duplicates

获取节点数:

numnodes(N) :-
    allnodes(Nodes),
    length(Nodes, N).

答案 1 :(得分:2)

我最近没有写过很多Prolog代码,但这是我认为我会写的(未经测试):

printedge(X,Y) :-    graph(X,Y), write("1 ").
printedge(X,Y) :- \+ graph(X,Y), write("0 ").

printmatrix :-
    List = [a,b,c,d],
    member(Y, List),
    nl,
    member(X, List),
    printedge(X,Y),
    fail.

现在你只需要以某种方式获得元素列表。