我需要创建一个图表顶点以事实表示的邻接矩阵: 序言中的邻接矩阵
graph(a,b).
graph(c,c).
graph(b,c).
我需要输出矩阵:
0 1 0
0 0 1
0 0 1
我知道我应该做的每一行的列表,但是当他们的符号,而不是数字出现的问题,所以我不没有任何想法知道如何知道该列表的大小(例如,如果有一个图(e,f),该列表必须是六个数字,所以f可以适合)。我不想要完整的答案,如果你只是想告诉我一个怎么做的草图,我想我会没事的。
我需要创建一个图表顶点以事实表示的邻接矩阵: 序言中的邻接矩阵
graph(a,b).
graph(c,c).
graph(b,c).
我需要输出矩阵:
0 1 0
0 0 1
0 0 1
我知道我应该做的每一行的列表,但是当他们的符号,而不是数字出现的问题,所以我不没有任何想法知道如何知道该列表的大小(例如,如果有一个图(e,f),该列表必须是六个数字,所以f可以适合)。我不想要完整的答案,如果你只是想告诉我一个怎么做的草图,我想我会没事的。
我没有写太多的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.
现在你只需要获得元素的列表莫名其妙。
要获得所有节点的列表:
node(X) :- graph(X,_).
node(X) :- graph(_,X).
allnodes(Nodes) :-
setof(X, node(X), Nodes). % removes duplicates
为了得到节点的数目:
numnodes(N) :-
allnodes(Nodes),
length(Nodes, N).
感谢这么多,它的作品比我所能想到,我只是去生成列表:D!非常感谢〜! – Kirby 2011-03-27 22:25:30