找出给定的图是欧拉还是半欧拉

时间:2018-05-07 19:05:30

标签: python graph

我正在研究我的学校项目,并且在代码的最后我正在努力。最后一行假设检查图是否为半欧拉不起作用,我没有想法如何解决它。我是Python的初学者,希望看到一些好的建议:)

    graph = {
    "1" : set(["2", "6"]),
    "2" : set(["1", "6", "7", "3"]),
    "3" : set(["2","7","4", "5"]),
    "4" : set(["3", "5"]),
    "5" : set(["3","4", "7", "6"]),
    "6" : set(["1","2", "7", "5"]),
    "7" : set(["2", "3", "5"]),
}

def path(x, node, visited):
    if node not in visited:
        visited.append(node)
        for n in x[node]:
            path(x,n, visited)
    return visited

visited = path(graph,"1", [])

print("Graph path: ", visited)

values = list(map(len, graf.values()))
print(values)


if all(map(lambda x: x % 2 == 0, values)):
    print("Eulerian")
else list(filter(lambda x: x % 2 == 1, values)) >= 2:
    print("Semi-eulerian")

1 个答案:

答案 0 :(得分:0)

如果你是初学者,你应该远离lambdas;那些使脚本更难阅读。

通过快速查看您发布的内容,您可以将列表与整数进行比较。

https://docs.python.org/2/library/functions.html#func-list

我不知道过滤器/ lambda的输出是什么,但当你用list函数包装它时,你将获得一个列表。我很惊讶脚本并没有彻底崩溃,因为要问一个列表是否大于"大于"整数没有程序性或数学意义。除此之外,它会下降到列表等于整数条件,它总是为假。

此外,您的if / else结构已被破坏 - 您可能意味着" elif" (否则如果)。

只是一个猜测,但如果最后一个条件是"如果在值#34;中至少有2个奇数,则半欧拉,那么你可能意味着(在if子句之后):

elif len(list(filter(lambda x: x % 2 == 1, values))) >= 2:
    print("Semi-eulerian")