【问题标题】:Depth First Search Empty Set Error深度优先搜索空集错误
【发布时间】: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


【解决方案1】:

正如@MosesKoledoye 所指出的: 我只是改变:

if not myStack:

while myStack:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多