关键词:图、邻接矩阵、邻接表、广度优先搜索、最短路径、深度优先搜索、拓扑排序、最小生成树、单源最短路径、Dijkstra算法、
图的表示
图的两种表示方法:邻接矩阵表示和邻接表表示。
图的广度优先搜索
可处理无向图或有向图
从起始顶点s出发的广度优先搜索(遍历所有顶点,只需要对每个顶点调用一次该函数):将顶点分成3类:
1 未遍历到的白色;
2 第一次被遍历到的灰色;
3 从一个灰色顶点v的外围找白色顶点,找到的都设置为灰色,此时这个v遍历完成,遍历完成设置成黑色;
4 起始点s加入队列Q,灰色顶点都要加入Q,只要Q不空就继续;
广度优先遍历结果
1 广度优先搜索遍历到过程会生成一颗根节点为s的树。
2 树上的每个顶点都有一个距离,表示这个顶点离起始顶点的边的个数。
3 广度优先搜索的结果就是单源最短路径(即,路径长度为经过的边的个数,边的权均为1)。
图的深度优先搜索
深度优先搜索是一个递归函数,总是优先对第一次遍历到底灰色顶点接着去遍历灰色顶点的邻接白色顶点。
可处理无向图或有向图
深度优先搜索的结果
1 深度优先搜索的结果按照父子节点得到拓扑排序(无回路图)
最小生成树
贪心算法
有n个元器件,用n-1个导线将他们连起来(无向图)。
Prim算法,从一个顶点开始加入已经遍历的集合,每次从连接已经遍历集合和未遍历集合的边里面选长度最短的那条边加入即可。
单源最短路径
有向无环图,边上的权非负
Dijkstra算法(贪心算法)
每次选一个距离最近的顶点进来,用这个最近的顶点的边,更新外围可达顶点到源点的距离。