图的基本算法——广度优先搜索和深度优先搜索
2018-03-14 10:56
274 查看
图是一般用来定义对象之间的关系或联系的模型。在图的基本算法中,最基础的就是遍历算法。我们根据访问节点的顺序不同可分为广度优先搜索BFS和深度优先搜索DFS。 简单来说,广度优先搜索的特点是在遍历图中顶点之前先访问当前顶点的所有邻接结点;深度优先搜索的特点是访问途中顶点后递归的访问此顶点的所有未访问过的相邻顶点。
BFS的思路就是从初始顶点开始一直访问其所有的邻接顶点一直到终止,其算法利用了队列先进先出的思想。
DFS的思路就是从顶点开始从一条路线访问下去直到终止,然后进行回溯到上一步,还一条路线访问下去同样直到终止。
因为时间关系,我仅仅用python实现了BFS广度优先搜索。代码贴在下面,不难很简单就不解释了。
BFS的思路就是从初始顶点开始一直访问其所有的邻接顶点一直到终止,其算法利用了队列先进先出的思想。
DFS的思路就是从顶点开始从一条路线访问下去直到终止,然后进行回溯到上一步,还一条路线访问下去同样直到终止。
因为时间关系,我仅仅用python实现了BFS广度优先搜索。代码贴在下面,不难很简单就不解释了。
#-*- coding:utf-8 -*- # 类似于树的层次遍历结构 """ :type num: int 结点的个数 :type edges: List[List[int]] :rtype: List[int] """ import Queue def bfs(num, edges, visited, start): queue = Queue.Queue() # 队列 queue.put(start) visited[start] = 1 while not queue.empty(): front = queue.get() print front for i in range(num): if (not visited[i]) and ([i, front] in edges): queue.put(i) visited[i] = 1 if __name__ == '__main__': num = 5 # 结点个数 edges = [[1,3],[2,3],[0,3],[0,1],[2,1],[1,2],[0,2],[0,4],[2,4]] # 结点的联系 visited = [0 for n in range(num)] # 已经访问过的点 for i in range(num): if visited[i] == 1: continue bfs(num, edges, visited, i)P.S. edges数组中的元素表示的是结点与结点的联系,比如[1,3]表示的是结点3指向结点1。
相关文章推荐
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
- 算法导论-图的搜索算法之深度优先搜索和广度优先搜索
- 图基本算法 图搜索(广度优先、深度优先)
- (算法入门)基本图论-深度优先搜索之JAVA实现
- 图算法-深度优先搜索和广度优先搜索
- 图基本算法 图搜索基于邻接表的(广度优先、深度优先)
- 【算法——02】图的遍历——BFS广度优先搜索、DFS深度优先搜索
- 【算法学习】二、深度优先搜索与广度优先搜索
- 【游戏编程】AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- [算法] 基本图算法:深度优先搜索、广度优先搜索
- AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- 算法之深度优先搜索和广度优先搜索
- 面试题常见算法之图的广度优先搜索和深度优先搜索
- 算法——基本的图算法:广度优先搜索、深度优先搜索
- 树:深度优先搜索、广度优先搜索、背包问题
- 邻接表 邻接矩阵 广度优先搜索 深度优先搜索
- 输入一个1~9之间的数字 ,对 1到该数之间所有的数进行全排序(深度优先搜索的基本模型)
- 算法基础之python实现深度优先搜索的数独问题
- 算法细节系列(16):深度优先搜索