Python 深度优先搜索输出在每次运行时都会发生变化
我有以下深度优先搜索代码:Python 深度优先搜索输出在每次运行时都会发生变化,python,graph,depth-first-search,Python,Graph,Depth First Search,我有以下深度优先搜索代码: def dfs(graph, vertex): visited = set() stack = [vertex] while stack: vertex = stack.pop() if vertex not in visited: visited.add(vertex) stack.extend(graph[vertex]) return visited
def dfs(graph, vertex):
visited = set()
stack = [vertex]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex])
return visited
def main():
test_graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
print(dfs(test_graph, 'A'))
if __name__ == '__main__':
main()
每次执行我都会得到不同的输出
我是否可以进行任何更改,使输出始终以
顶点的值开始(在本例中为A)?您的算法很好,并且每次运行时都执行相同的操作。catch使用set
返回输出。一个集合没有排序,在不同的运行中可能会得到不同的结果。您可以通过多种方式解决这个问题—一种是在从dfs
函数返回之前,从集合中创建一个列表并对其进行排序
另一个解决方案是首先使用列表:
def dfs(graph, vertex):
visited = []
stack = [vertex]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.append(vertex)
stack.extend(graph[vertex])
return visited
在Python中,集合
不是有序的。您可以使用来按插入顺序保留键,同时也可以将不在
在O(1)中工作,就像在一个集合中一样:
从集合导入订单数据
def dfs(图形、顶点):
访问量=订购量()
堆栈=[顶点]
堆栈时:
vertex=stack.pop()
如果未访问顶点:
已访问[顶点]=真
stack.extend(图[顶点])
返回列表(visted.keys())
def main():
测试图={
“A”:[“B”,“C”],
'B':['A','D','E'],
'C':['A','F'],
“D”:[B'],
“E”:[“B”,“F”],
‘F’:[‘C’,‘E’]
}
打印(dfs(测试图'A'))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()