使用词典修改深度优先搜索

时间:2016-09-24 17:36:31

标签: python dictionary depth-first-search

有许多非常好的DFS python实现,例如this one,但它们都不包括成本。我希望能够记录DFS路径的总成本,但此实现将图表表示为集合字典。

graph = {'A': set(['B', 'C']),
         'B': set(['A', 'D', 'E']),
         'C': set(['A', 'F']),
         'D': set(['B']),
         'E': set(['B', 'F']),
         'F': set(['C', 'E'])}

def dfs(graph, start):
    visited, stack = set(), [start]
    while stack:
        vertex = stack.pop()
        if vertex not in visited:
            visited.add(vertex)
            stack.extend(graph[vertex] - visited)
    return visited

dfs(graph, 'A') # {'E', 'D', 'F', 'A', 'C', 'B'}

我认为套装不能充分记录成本。所以我觉得将图形表示为字典词典将是实现成本的好方法。即:

graph = {'A' : {'C' : 10,
                'D' : 7}
                etc.....

我的问题是,如何修改此算法以使用这种新类型的图形?我对python语法仍然非常不熟悉,所以看到这样的例子确实有帮助。

或者,如果有更简单的方式来表示费用,我可以接受建议

编辑:好的,这是一种不同的思考方式。如何修改上面的代码,以便它类似于集合处理嵌套字典?

EDIT2:我相信我已经自己解决了,现在我理解了词典的keys()函数会返回一个列表。

1 个答案:

答案 0 :(得分:0)

看起来NetworkX正是您要找的。 DFS包含在包中,其图形实现就是您想要的。希望能帮助到你。