2011-06-13 86 views
0

本週我做了這個作業:計算無向圖中節點的等級並測試它是否有歐拉路徑。該函數應該像下面:Prolog等級計數器和eulerpath

gradliste([[a,b],[b,c],[b,g],[c,d],[d,e],[e,f],[f,g],[g,h],[c,f]],X). 
X = [[a, 1], [b, 3], [c, 3], [g, 3], [d, 2], [e, 2], [f, 3], [h, 1]] 

testEulerweg([[a,b],[b,c],[c,d],[d,e],[a,e],[b,d],[b,e],[a,d]]). 
true. 

我的功能gradliste的第一個想法是「合併」的圖形,併產生像這樣的列表: [a,b,b,c,b,g,c,d,d,e,e,f,f,g,g,h,c,f]那我算每個節點的數字。不幸的是我在merge卡住了。

和第二功能testEulerweg我想我應該先寫一個函數allconnected像以下工作:

allconnected([[a,b],[b,c],[c,d]]). 
true. 

allconnected([[a,b],[b,c],[e,f]]). 
False. 

然後我可以檢查是否有與使用gradliste功能奇數級數沒有或2個節點。

任何人都可以幫助我的想法嗎?我也開了新的想法:)

在此先感謝

bearzk

回答

0

merge功能簡單。我將其重命名flatten

​​

我會讓你寫的基本情況。

至於找到歐拉路徑,請查看Wikipedia的算法。第二個可以在select/3而言很容易實現,只要你flatten列表第一:)

+0

我仍然不知道如何測試,如果路徑是一筆畫問題,你會不會介意給我更多的提示? – bearzk 2011-06-13 11:53:51