本文通过实例介绍了Python数据结构图的广度优先和深度优先搜索算法和算法。分享给大家参考,如下:根据维基百科的伪代码实现:广度优先BFS:使用一个队列,集合标记初始节点已经找到,放入队列,每循环从队列中弹出一个节点将所有连接的节点放入队列并标记为找到通过队列,打开迷宫路口的所有门,从一个门进入并继续打开内门,然后返回上一个门”""procedureBFS(G,v)isletQbeaqueueQ.enqueue(v)labelvasdiscoveredwhileQisnotemptyv←Q.dequeue()procedure(v)foralledgesfromvtowinGG.adjacentEdges(v)如果w未标记为已发现Q.enqueue(w)将w标记为已发现"""defprocedure(v):passdefBFS(G,v0):"""breadthSearchfirst"""q,s=[],set()q.extend(v0)s.add(v0)whileq:#当队列q不为空时v=q.pop(0)procedure(v)forwinG[v]:#对于图G中顶点v的所有相邻点wifwnotins:#如果顶点w是notfoundq.extend(w)s.add(w)#记录w已经找到深度优先DFS使用栈,将初始节点收集到栈中,每次循环从栈中弹出一个节点,并标记它有被发现。对于每一个出栈节点,通过栈的结构,将与其相连的所有节点放入队列中,一步步深入""""伪代码[编辑]输入:图G和G的一个顶点v输出:所有顶点reachablefromvlabeledasdiscovered递归实现DFS的n:[5]1过程DFS(G,v):2发现的标签v3对于G.adjacentEdges(v)中从v到w的所有边做4如果顶点w没有被标记为发现的那么5递归调用DFS(G,w)Anon-recursiveimplementationofDFS:[6]1procedureDFS-iterative(G,v):2设S为堆栈3S.push(v)4whileS不为空5v=S.pop()6如果v未标记为已发现:7将v标记为已发现8对于G.adjacentEdges(v)中从v到w的所有边do9S.push(w)"""defDFS(G,v0):S=[]S.append(v0)label=set()whileS:v=S.pop()ifvnotinlabel:label.add(v)procedure(v)forwinG[v]:S.append(w
