数据结构——第六讲、图(上)(1)

6.1 什么是图

图是描述多对多关系的结构,图包含顶点和边,顶点用V(Vertex)表示,边用E(Edge)表示,双向边用(v,w)圆括号括住的顶点对表示,单向边用

Graph Create();
Graph InsertVertex(Graph G, Vertex V);
Graph InsertEdge(Graph G, Edge E);
void DFS(Graph G, Vertex V); //从V出发深度优先遍历图G
void BFS(Graph G, Vertex V); //从V出发广度优先遍历图G
void ShortestPath(Graph G, Vertex V, int Dist[]);//计算图G中顶点V到其他任意顶点的最短距离。
void MST(Graph G);//计算图G的最小生成树

怎么在程序中表示图:

邻接矩阵:对于一个图有N个节点,节点从0到N-1进行编号,用一个二维数组存储G[i,j],如果第i个元素和第j个元素之间有边,那么就把G[i,j]的值设置为1,否则设置为零。
对于无向图(即两个节点之间的边没有方向,G[i,j]和G[j,i]等效),我们可以省略一半的存储空间,用一个(N*(N-1)/2)大小的一维数组来存储,要找i,j之间的边可以用(i*(i+1)/2+j)来索引。有向图不可省略。

邻接矩阵查找某个节点邻接的节点很方便,只需扫描第i行的元素是否为1即可,对于有权图,把数组值改为权值即可,对于有向图,ij表示从i到j,ji表示从j到i。

邻接矩阵存储稀疏图(节点很多边很少)会非常浪费空间,比较适合存稠密图。

邻接表:稀疏图用邻接矩阵会浪费很多空间,那么我们可以用邻接表来存储稀疏图,邻接表是一个链表类型的数组,有N个节点就有N个元素,每个元素的值都是一个链表头,这个链表链接着这个元素对应节点的所有的边,无所谓顺序 ,一个接一个把边存下来,邻接表存稀疏矩阵比较好,但是终究不如邻接矩阵方便

猜你喜欢

转载自blog.csdn.net/github_39312212/article/details/78198188