Prolog等级计数器和eulerpath

时间:2011-06-13 10:31:22

标签: graph path prolog

本周我做了这样的功课:计算无向图中的节点等级,并测试其中是否有欧拉路径。该功能应如下所示:

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

1 个答案:

答案 0 :(得分:0)

merge功能很简单。我将其重命名为flatten

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

我会让你写下基本案例。

至于找到欧拉路径,请查看Wikipedia处的算法。第二个可以轻松实现select/3,只要您首先 flatten列表:)