Python图的广度优先与深度优先搜索算法 Python数据结构与算法之图的广度优先与深度优先搜索算法示例
hanahimi 人气:0想了解Python数据结构与算法之图的广度优先与深度优先搜索算法示例的相关内容吗,hanahimi在本文为您仔细讲解Python图的广度优先与深度优先搜索算法的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python,数据结构,算法,图,广度优先,深度优先,搜索算法,下面大家一起来学习吧。
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法。分享给大家供大家参考,具体如下:
根据维基百科的伪代码实现:
广度优先BFS:
使用队列,集合
标记初始结点已被发现,放入队列
每次循环从队列弹出一个结点
将该节点的所有相连结点放入队列,并标记已被发现
通过队列,将迷宫路口所有的门打开,从一个门进去继续打开里面的门,然后返回前一个门处
""" procedure BFS(G,v) is let Q be a queue Q.enqueue(v) label v as discovered while Q is not empty v ← Q.dequeue() procedure(v) for all edges from v to w in G.adjacentEdges(v) do if w is not labeled as discovered Q.enqueue(w) label w as discovered """ def procedure(v): pass def BFS(G,v0): """ 广度优先搜索 """ q, s = [], set() q.extend(v0) s.add(v0) while q: # 当队列q非空 v = q.pop(0) procedure(v) for w in G[v]: # 对图G中顶点v的所有邻近点w if w not in s: # 如果顶点 w 没被发现 q.extend(w) s.add(w) # 记录w已被发现
深度优先DFS
使用 栈,集合
初始结点入栈
每轮循环从栈中弹出一个结点,并标记已被发现
对每个弹出的结点,将其连接的所有结点放到队列中
通过栈的结构,一步步深入挖掘
"""" Pseudocode[edit] Input: A graph G and a vertex v of G Output: All vertices reachable from v labeled as discovered A recursive implementation of DFS:[5] 1 procedure DFS(G,v): 2 label v as discovered 3 for all edges from v to w in G.adjacentEdges(v) do 4 if vertex w is not labeled as discovered then 5 recursively call DFS(G,w) A non-recursive implementation of DFS:[6] 1 procedure DFS-iterative(G,v): 2 let S be a stack 3 S.push(v) 4 while S is not empty 5 v = S.pop() 6 if v is not labeled as discovered: 7 label v as discovered 8 for all edges from v to w in G.adjacentEdges(v) do 9 S.push(w) """ def DFS(G,v0): S = [] S.append(v0) label = set() while S: v = S.pop() if v not in label: label.add(v) procedure(v) for w in G[v]: S.append(w)
希望本文所述对大家Python程序设计有所帮助。
加载全部内容