用python写DFS和BFS算法

前言:

菜鸟学算法。加油!

一、什么是DFS和BFS?

1、BFS算法:

宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。

 

2、DFS算法:

事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.

深度优先遍历图的方法是,从图中某顶点v出发:

(1)访问顶点v;

(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。


二、用python实现BFS以及DFS算法:

1、BFS:

graph={
    'A':['B','C'],
    'B':['A','C','D'],
    'C':['A','B','D','E'] ,
    'D':['B','C','E','F'],
    'E':['C','D'],
    'F':['D']
    }

def BFS(graph,s):  #s表示开始结点,广度优先算法依靠队列
    queue=[]#python数组中可以动态添加和删除东西
            #queue.append('A'),A加入数组,queue.pop('A'),A退出数组。
    queue.append(s)#开始结点入队
    seen=[]
    seen.append(s)
    while (len(queue)>0):
        vertex=queue.pop(0)
        nodes=graph[vertex]
        for w in nodes:
           if w not in seen:
               queue.append(w)
               seen.append(w)
        print(vertex)

BFS(graph,'A')
            

 2、DFS

基本用法练习;

graph={
    'A':['B','C'],
    'B':['A','C','D'],
    'C':['A','B','D','E'] ,
    'D':['B','C','E','F'],
    'E':['C','D'],
    'F':['D']
    }
def DFS(graph,s):
     stack=[] #栈
     stack.append(s)
     seen=set()
     seen.add(s)
     while (len(stack)>0):
         vertex=stack.pop()
         nodes=graph[vertex]
         for w in nodes:
             if w not in seen:
                 stack.append(w)
                 seen.add(w)
         print(vertex)

DFS(graph,'A')#起点任选

猜你喜欢

转载自blog.csdn.net/m0_51786204/article/details/129768932