数据结构:第六章学习小结
一、本章内容小结
1.基于邻接矩阵的存储 四要素
1 //-----图的邻接矩阵存储表示----- 2 #define Maxint 32767 3 #define MVNum 100 4 typedef char VerTexType; 5 typedef int ArcType; 6 typedef struct 7 { 8 VerTexType vexs [MVNum] ; 9 ArcType arcs[MVNum) [MVNum]; 10 int vexnum,arcnum; 11 }AMGraph;
2.基于邻接表的存储 三要素
1. //--------邻接表中邻接点的类型定义------ 2. #define MVNum 100 3. typedef struct ArcNode 4. { 5. int adjvex; 6. struct ArcNode * nextarc; 7. Otherinfo info; 8. }ArcNode; 9. //--------邻接表中顶点的类型定义-------- 10. typedef struct VNode 11. { 12. VerTexType data; 13. ArcNode *firstarc; 14. } VNode,AdjList[MVNum]; 15. //--------图的三要素-------------------- 16. typedef struct 17. { 18. AdjList vertices; 19. int vexnum,arcnum; 20. }ALGraph;
3.辨析Prim,Kruskal,Dijkstra算法
Kruskal:先选剩余中最小的边,再看是否已包含所有的顶点,即n个顶点,是否有n-1条边
Prim:从任意顶点开始,选择与之相邻的最小边,将另一端的顶点加入,再选现有顶点集相邻的最小边
Dijkstra:与Prim算法有一定相似,选择一点作为源点,按各顶点与源点最短路径长度递增的顺序,除去在V集合中的,把剩下的当中路径最短的选进去,直到所有的点在V中
需要注意的是:1.Prim,Kruska用于求最小生成树,即树的权值和最小;Dijkstra求单源最短路径,即源点到各点最短的路径
2.Prim算法与Dijkstra算法方法类似,但有区别。Prim中的最小权值边是基于整个顶点集的,而Dijkstra的最小权值边是基于源点,新加入的点只是作为中转点。
Prim算法的辅助数据结构closedge[]在更新时,更新到邻接点;而Dijkstra算法的辅助数据结构D[]更新到源点,要求和。
附一道例题: