2011-03-27 83 views
2

我需要创建一个图表顶点以事实表示的邻接矩阵: 序言中的邻接矩阵

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

我需要输出矩阵:

0 1 0 
0 0 1 
0 0 1 

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

回答

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. 

现在你只需要获得元素的列表莫名其妙。

+0

感谢这么多,它的作品比我所能想到,我只是去生成列表:D!非常感谢〜! – Kirby 2011-03-27 22:25:30

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). 
+0

这完成了我的问题xD我已经完成了第一个一半,谢谢! – Kirby 2011-03-27 22:44:57

+0

@kirby:如果有帮助,那么请upvote这个答案。 – 2011-03-27 22:48:37

+0

我不能,它需要15个或更多的声望(今天刚刚注册):<但我会回来,一旦我得到足够的回报! – Kirby 2011-03-27 23:30:00