python广度优先搜索算法对图进行遍历

对于广度优先搜索算法的另一个经常会遇到的问题就是关于在图的遍历过程中,如果给定一个图的结构,需要实现对这个无向图中的所有节点进行遍历,图如下:

python广度优先搜索算法对图进行遍历_第1张图片

添加图片注释,不超过 140 字(可选)

对于这个无向图的使用广度优先搜索算法遍历的整体思路主要就是,只要访问了一个节点,则将这个访问节点的所有相邻的节点入队(广度优先搜索算法主要使用队列来实现),这样就可以准备在后续的循环迭代职工进行访问。如果对以上的无向图使用邻接矩阵李艾表示,主要是以二维列表的形式来表示,二维列表中的1代表的是两个节点之间存在连接的边,如果是二维列表中的0则代表的是两个节点之间不存在无边。邻接矩阵表示如下:

python广度优先搜索算法对图进行遍历_第2张图片

添加图片注释,不超过 140 字(可选)

遍历这个无向图的过程是,现选择节点1作为初始节点并入队,并且定义一个数组,将数组中的节点1的所在位置标记为1,之后就是循环迭代,只要队列不为空的状态下,就将队列头部的元素出队并输出,这里就是节点1出队,然后将节点1的所有相邻接的并且这些节点是没有被访问过的节点依次入队,也就是2,3,4节点入队,并且在定义的数组中将这三个节点的位置标记为1。然后继续前面的操作,也就是出队输出,相邻未被访问到的节点入队,也就是2节点出队,3节点入队,依次将所有的4,5,3节点出队就完成了整个广度优先搜索的过程。对于邻接矩阵如下:

python广度优先搜索算法对图进行遍历_第3张图片

添加图片注释,不超过 140 字(可选)

对于python实现的代码如下:

from collections import deque

class graph:
    def __init__(self,point,graph):
        self.graph = graph
        self.point =point
        self.visited = [0 for _ in range(len(graph))]
    def bfs(self,n):
        queue = deque[n]
        self.visited[n]=1
        while queue:
            node_index = queue.popleft()
            print(self.point[node_index])
            for i in range(len(self.graph)):
                if self.graph[node_index][i] == 1 and self.visited[i]==0:
                    queue.append(i)
                    self.visited[i] =1


graph(point,graph).bfs(0)

你可能感兴趣的:(宽度优先,算法,数据结构,python)