Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
使用Dict进行Python深度优先搜索_Python_Algorithm_Search_Graph_Depth First Search - Fatal编程技术网

使用Dict进行Python深度优先搜索

使用Dict进行Python深度优先搜索,python,algorithm,search,graph,depth-first-search,Python,Algorithm,Search,Graph,Depth First Search,我一直看到深度优先搜索的伪代码,这让我完全搞不清楚它与我的具体问题之间的关系。我试图确定“有向图”是否是强连通的 如果我有一个包含2个字符串(第一个表示源,第二个表示目标)的dict和一个表示边权重的可选数字: {'Austin': {'Houston': 300}, 'SanFrancisco': {'Albany': 1000}, 'NewYorkCity': { 'SanDiego': True }} 如何实现DFS的某些元素?我知道我可以从一个顶点“奥斯汀”开始,而“休斯顿”是另一个

我一直看到深度优先搜索的伪代码,这让我完全搞不清楚它与我的具体问题之间的关系。我试图确定“有向图”是否是强连通的

如果我有一个包含2个字符串(第一个表示源,第二个表示目标)的dict和一个表示边权重的可选数字:

{'Austin': {'Houston': 300}, 'SanFrancisco':  {'Albany': 1000}, 'NewYorkCity': { 'SanDiego': True }}
如何实现DFS的某些元素?我知道我可以从一个顶点“奥斯汀”开始,而“休斯顿”是另一个顶点。但我不知道这些在Python代码中是如何工作的

就像我有一个伪代码:

function graph_DFS(start):
    # Input: start vertex
    S = new Stack()
    # Mark start as visited
    S.push(start)
    while S is not empty:
        node = S.pop()
        # Do something? (e.g. print)
        for neighbor in node’s adjacent nodes:
            if neighbor not visited:
                # Mark neighbor as visited
                S.push(neighbor)
我可以看出我可以通过“奥斯汀”作为我的起点。但我究竟如何将“Austin”设置为已访问,以及如何查看与“Austin”相邻的节点

另外,如果图是强连通的,我怎么能使用这个算法返回true或false呢

我只是很难看到这种从伪代码到代码的转换。谢谢你的帮助

我可以看出我可以通过“奥斯汀”作为我的起点。但究竟如何 我是否将“Austin”设置为已访问,以及如何查看哪些节点相邻 去奥斯汀

你可以在代码中看到你弹出了“Austin”,所以我们不会回头看它。在数据结构中,一个顶点只允许有一条边,因此不会有多个邻居

另外,如果图是强连通的,我怎么能使用这个算法返回true或false呢

这只是一个实用的DFS函数,用于查找图是否强连接的算法,需要运行DFS两次。基本上,提示是您想知道在运行DFS时是得到一棵树还是一个林


在我看来,您应该更新数据结构,使每个关键点的值都是一个列表(它有一条边的顶点)。您也可以将权重存储在列表中,以备以后需要。

您的数据结构不适合实现常规图形,因为它不允许从一个顶点有多条边。dict值应该是目的地列表。