0

今週、私はこの宿題をしなければなりませんでした: 無向グラフのノードの等級を数え、その中にオイラーパスがあるかどうかをテストします。関数は次のように機能する必要があります。

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

2番目の関数については、testEulerwegまず次のように機能する関数を作成する必要があると思いallconnectedます:

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

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

次に、関数を使用して、グレード番号が奇数のノードがないか、2 つあるかどうかを確認できgradlisteます。

誰かが私の考えを手伝ってくれますか? また、新しいアイデアにもオープンです:)

前もって感謝します

ベアツク

4

1 に答える 1

0

merge機能はシンプルです。名前を変更しますflatten

flatten([[X,Y] | Edges], [X,Y|Rest]) :-
    flatten(Edges, Rest).

そして、基本的なケースを書きましょう。

オイラー パスの検索については、ウィキペディアでアルゴリズムを確認してください。2番目のものは、最初にリストを作成しないselect/3限り、の観点から簡単に実装できます:) flatten

于 2011-06-13T10:38:23.573 に答える