Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 深度优先搜索输出在每次运行时都会发生变化_Python_Graph_Depth First Search - Fatal编程技术网

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()