【发布时间】:2016-11-16 11:47:12
【问题描述】:
我正在尝试在图表中获取所有连接的组件并将它们打印出来。我正在遍历图形的每个节点并从该节点开始执行深度优先搜索(DFS)。这是我的代码:
graph = {
'a': ['b'],
'b': ['c'],
'c': ['d'],
'd': [],
'e': ['f'],
'f': []
}
def DFS(graph, start_node, stack = [], visited = []):
stack.append(start_node)
while stack:
v = stack.pop()
if v not in visited:
visited.append(v)
for neighbor in graph[v]:
stack.append(neighbor)
return visited
def dfs_get_connected_components_util(graph):
visited = []
for node in graph:
if node not in visited:
DFS_algo = DFS(graph, node)
print(DFS_algo)
visited = DFS_algo
print(dfs_get_connected_components_util(graph))
根据我的图,有两个连通分量,a -> b -> c -> d 和 e -> f
相反,我得到以下打印输出:
['c', 'd']
['c', 'd', 'a', 'b']
['c', 'd', 'a', 'b', 'f']
['c', 'd', 'a', 'b', 'f', 'e']
我似乎无法弄清楚我在连接组件功能中做错了什么。我想这可能更像是一个 python 问题。
【问题讨论】:
-
我认为这与mutable default arguments的问题有关
-
这只是一个问题......但这个问题也没有很好地定义。如果您从“c”开始遍历图形,您将永远找不到“a”作为连接节点。所以你应该准确地定义你在问什么。
-
无向图有连通分量。有向图具有强连通分量。两者都是等价关系。我相信您的定义是错误的,但这与已回答的python特定编码问题无关。
-
感谢@KennyOstrom。我已经对此进行了澄清。我假设图表是无向的。我的解决方案没有找到强连接的组件,并且如果图形是有向的则无效。
标签: python graph-theory depth-first-search connected-components