数据结构期末 图
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
基本概念
A directed graph is called strongly connected if there is a directed path from any vertex to any other vertex. If we suppress the direction of the edges and the resulting undirected graph is connected, we call the directed graph weakly connected.
图存储 邻接矩阵与邻接表
1)给定两个顶点 看他们是否相连 在邻接矩阵中只需要看第i行第j列的元素即可
而在邻接表中 要找到i的顶点 遍历链表各项看是否有j
2)看某个顶点的所有邻居 有向图中 入度为第i列元素之和
出度为第i行元素之和
3)所有顶点的邻居 遍历整个矩阵
图的遍历(DFS,BFS)(必考)
https://www.cs.usfca.edu/~galles/visualization/BFS.html
https://www.cs.usfca.edu/~galles/visualization/DFS.html
for(all v in G)<-对每个连通分量做一个循环
if(!visited[v])traverse()
拓扑排序(BFS方法) 有向无环图
首先找到没有入度的点 将这些点加入到队列。
然后不停地从队列中弹出点。
对每一个弹出的点,处理他们的后继,将入度减一。
当入度为0时,即可加入到队列中。
重复上述过程直到所有的点都从队列中弹出
最小生成树 概念与Prim算法
prim算法维护数组 S V-S 每次挑一个点出来 最小距离做一次更新 扩展所连的点 松弛操作
先随便挑一个点 接下来每次挑的点是保证与已挑出点相连的权重最小的点
https://www.cs.usfca.edu/~galles/visualization/Prim.html
时间复杂度和空间复杂度
https://blog.csdn.net/Charles_ke/article/details/82497543
邻接表存储 图的DFS BFS Topsort均为时间复杂度O(V+E) 空间复杂度 O(V)
最短路径问题
单源
通常指给出一个起始点 s,求解 s到其他所有点的最短路径
多源
图中任意两点的最短路径
迪杰斯特拉算法
算法过程
从开始点起 每次加入通过已加入点从开始点可达的路径长度最短的点
https://www.cs.usfca.edu/~galles/visualization/Dijkstra.html
如何求得具体最短路径?
用一个辅助数组保存当前节点是从哪个点扩展来的
path[i] 表示 当前最短路径中,vi是通过哪一个点连接到起始点的,和BFS迷宫问题类似