2011-03-27 180 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