深度优先搜索

《算法》笔记 10

白昼怎懂夜的黑 提交于 2019-11-25 21:19:15
表示无向图的数据结构 邻接表数组 深度优先搜索 深度优先搜索寻找路径 深度优先搜索的性能特点 广度优先搜索 两种搜索方式的对比 图表示由相连的结点所表示的抽象模型,这个模型可以用来研究类似“能否从某个点到达指定的另一个点”、“有多少个结点和指定的结点相连”、“两个结点之间最短的连接是哪一条”。图的算法与很多实际问题相关。比如地图、搜索引擎、电路、任务调度、商业交易、计算机网络、社交网络等。 无向图是一种最简单、最基本的图模型,仅仅由一组顶点和一组能够将两个顶点相连的边组成。 在图的实现中,用从0开始的整数值来表示图的结点,用类似8-5来表示连接结点8和5的边,在无向图中,这与5-8表示的是同一条边。4-6-3-9表示的是4到9之间的一条路径。 表示无向图的数据结构 无向图的API public class Graph{ Graph(int V) //创建一个含有V个顶点但不含有边的图 Graph(In in) //从标准输入流in读入一幅图 int v() //顶点数 int E() //边数 void addEdge(int v, int w) //向图中添加一条边v-w Iterable<Integer>adj(intv) //和相邻的所有顶点 String toString() //对象的字符串表示 } 第二个构造函数接受的输入由2*E+2个整数组成,前两行分别是V和E

图学习笔记

送分小仙女□ 提交于 2019-11-25 20:15:53
1、图 图中的元素我们就叫作 顶点; 图中的一个顶点可以与任意其他顶点建立连接关系叫作 边; 跟顶点相连接的边的条数叫作 度 ; 边 有方向的图叫作 有向图 , 边 没有方向的图就叫作 无向图 ; 顶点的 入度 ,表示有多少条边指向这个顶点 ; 顶点的 出度 ,表示有多少条边是以这个顶点为起点指向其他顶点 ; 带权图 ,每条边都有一个权重 。 2、图的存储 2.1 邻接矩阵 对于无向图来说,如果顶点 i 与顶点 j 之间有边,我们就将 A[i][j] 和 A[j][i] 标记为 1; 对于有向图来说,如果顶点 i 到顶点 j 之间,有一条箭头从顶点 i 指向顶点 j 的边,那我们就将 A[i][j] 标记为 1。 对于带权图,数组中就存储相应的权重。 2.2 邻接表 每个顶点对应一条链表,链表中存储的是与这个顶点相连接的其他顶点 。 3、图的遍历 3.1 广度优先搜索(BFS) 广度优先搜索(遍历) :一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索 。( 求得的路径就是从 s 到 t 的最短路径 ) 算法实践图: 3.2 深度优先搜索(DFS) 假设你站在迷宫的某个岔路口,然后想找到出口。你随意选择一个岔路口来走,走着走着发现走不通的时候,你就回退到上一个岔路口,重新选择一条路继续走,直到最终找到出口。这种走法就是一种深度优先搜索策略 。 3