【发布时间】:2017-05-14 23:24:28
【问题描述】:
我正在编写一个程序来确定有向图是否是强连接的。该图由 2 个字符串组成,1 个指向另一个,以及一个可选的数字边权重(如果没有数字则默认为 True)。
我有一个默认字典(dict):
import collections
myDefaultDict =
{'A': {'B': True},
'B': {'C': True},
'C': {'D': True, 'E': True},
'D': {'A': True},
'E': {'C': True}})
然后我有一组字符串:
myNewSet = {'D', 'E', 'C', 'A', 'B'}
然后我调用我的深度优先搜索函数:
for i in myNewSet:
newSet = graph_DFT(i)
print(newSet)
break
def graph_DFT(start):
functionSet = set() # Contains all visited nodes
myStack = []
myStack.append(start)
if not myStack:
node = myStack.pop()
for neighbor in myDefaultDict[node]:
if neighbor not in functionSet:
functionSet.add(neighbor)
myStack.append(neighbor)
return functionSet # Return the set with the visited nodes
问题是print(newSet)。此示例图是强连接的。也就是说,您可以从一个顶点到达每个顶点。但是print(newSet) 显示:
set() # But it should be equal to myNewSet, because this is a strongly connected graph
为什么我的newSet 是空的?不应该等于myNewSet吗?我需要它,因为这取决于我如何处理程序的其余部分,所以我可能在我的 graph_DFT 函数中做错了。
感谢您的帮助!
【问题讨论】:
-
if not myStack永远不是True,因为您在上一行中附加到列表中 -
我认为这意味着
while myStack not empty。如果不是,我该怎么做呢? -
while myStack: ... -
@MosesKoledoye 我把它改成了那样,但得到了相同的结果。
-
您应该使用bottom-up 方法。另请注意,该图表不是强连接,因为您无法从
E开始联系其他人
标签: python dictionary collections set graph-theory