檢查圖形是否為二段式,為什麼我的函數會返回無?

问题描述 投票:0回答:2
import collections
class Solution(object):
    def possibleBipartition(self, N, dislikes):
        graph = collections.defaultdict(list)
        for u, v in dislikes:
            graph[u].append(v)
            graph[v].append(u)

        color = {}
        def dfs(node, c = 0):
            if node in color:
                return color[node] == c
            color[node] = c
            for nei in graph[node]:
                dfs(nei,c^1)

        for node in range(1, N+1):
            if node not in color:
                dfs(node)
g=Solution()
N=3
dislikes=[[1,2],[2,3]]
print(g.possibleBipartition(N, dislikes))

网上有很多解决方法,但我对递归是个新手,我想了解一下为什么我的函数返回无,因为这些知识对我以后有帮助:)谢谢。我想了解为什么我的函数返回无,因为这些知识对我以后有帮助:)先谢谢你。

python recursion graph depth-first-search
2个回答
0
投票

似乎它返回的是 None,因为你没有一个 return ... 在你代码中的任何地方。我会确保你在你需要的地方明确地返回。例如,有两个地方你可能需要添加一个返回语句。

return dfs(nei,c^1)

在你的 dfs() 功能以及。

return dfs(node)

在你的 possibleBipartition() 函数。

请注意,在Python中,如果有返回,你需要显式地指定返回,而不像在Racket和Haskell等语言中。


0
投票

从表面上看,函数返回的是 None 因为你没有返回语句。所以函数 possibleBipartition 没有返回任何东西(即 None)。这只是python允许你在没有任何错误的情况下进行的语法操作,这可能会让新人感到困惑。你需要从你的函数中返回一些东西,以便你的 print 语句不只是 print None. 一个好的想法可能是,如果且仅当 possibleBipartition 有效时才返回 True。

你可以做的一个调整是检查你在函数中建立的color dict,看看 "possibleBipartition "是否有效。这可以通过以下事实来实现:如果一个图的每个顶点只属于一种颜色(在你的例子中是0或1),那么这个图就有一个有效的二分法。

© www.soinside.com 2019 - 2024. All rights reserved.