序言级计数器和eulerpath

序言级计数器和eulerpath,path,prolog,graph-theory,euler-path,Path,Prolog,Graph Theory,Euler Path,本周我做了一个家庭作业:计算无向图中节点的等级,并测试其中是否有euler路径。该函数的工作原理如下: 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

本周我做了一个家庭作业:计算无向图中节点的等级,并测试其中是否有euler路径。该函数的工作原理如下:

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.
allconnected([[a,b],[b,c],[c,d]]).
true.

allconnected([[a,b],[b,c],[e,f]]).
False.
我对函数GradLister的第一个想法是“合并”图形并生成如下列表: [a,b,b,c,b,g,c,d,d,e,e,f,f,g,g,h,c,f]然后我计算每个节点的数量。不幸的是,我在合并时结巴了

对于第二个函数testerweg,我想我应该首先编写一个函数allconnected,如下所示:

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.
allconnected([[a,b],[b,c],[c,d]]).
true.

allconnected([[a,b],[b,c],[e,f]]).
False.
然后我可以使用gradliste函数检查是否没有或有两个节点具有奇数等级号

有人能帮我提个主意吗?我也乐于接受新想法:

提前谢谢

bearzk

合并函数很简单。我将其重命名为“展平”:

我会让你写基本情况


至于寻找欧拉路径,请查看下面的算法。第二种方法可以很容易地用select/3实现,只要您不首先展平列表:

我仍然不知道如何测试路径是否为欧拉路径,您介意给我更多提示吗?