图的定义和术语
图是由顶点集合和弧的集合组成的。记作 G=(V,E).其中V(G)表示顶点集,E(G)表示弧集。顶点即为数据结构中的数据元素。<v,w>表示从 v 到 w 的一条弧,有方向的弧中,v 表示弧尾或者始点,w 表示弧头或者终点,此时的图称为有向图。(v,w)这样的无序对表示 v 和 w 之间的一条边。此时顶点之间不再强调方向性,称之为无向图。在实际应用中,图的弧或者边往往与具有一定意义的数相关,称这些数为权。带权的无向图和有向图分别称为无向网和有向网。
图中的顶点数为 n ,边或者弧的数目为 e,若不考虑顶点到其自身的弧或边,则对于无向图,边数e的范围是0到n(n-1)/2.称具有n(n-1)/2条边的无向图为无向完全图。对于有向图,弧的数目 e 的范围是0到 n(n-1) 称具有n(n-1)条弧的有向图为有向完全图。若 e<nlogn,则称为稀疏图,否则为稠密图。
如果图 G' 的顶点集合是另一个图 G 的顶点集合的子集, G' 的弧(边)集合也是 G 对应集合的子集,则成 G' 为 G 的子图。
度,入读和出度的概念:有向图中,一个顶点,有多少弧从这点出发,则这个点的出度就是多少,有多少弧到达这个点,则它的入度就是多少。出度和入度的和为度。无向图中,度的定义为与该顶点相连的边的数目。
路径和回路:从一个顶点到另一个顶点,经过许多其顶点,这些顶点加在一起的序列就是这两个顶点之间的路径。中间弧的数目就是路径长度。如果从一个顶点出发最后又回到了这个顶点,则这种路径是一个回路或环。
图的基本操作
对图的基本操作包含构造图,销毁图,查询途中顶点,对顶点赋值等等。
图的存储结构(建立)
图中的顶点可能与其他任意一个顶点之间有关系。因此图没有顺序存储表示的结构,图有两种常用的存储结构。
1,图的数组(邻接矩阵)存储表示
图的邻接矩阵用于表示图中顶点之间关系(及弧或边的权)的矩阵。如果图中顶点数为 n 则矩阵为 n 行 n 列。对于矩阵中的某个值 A[ i ][ j ], 如果顶点 Vi 和 Vj 之间有弧或者边的存在,则 A[ i ][ j ]=1否则为0.无向图的邻接矩阵一定是对称矩阵。网的邻接矩阵中,当两点之间有连接时,对应的矩阵中的元素应该赋值为对应的权值,否者赋值为∞。实际应用中的有向图的邻接矩阵多为稀疏矩阵,通常用二维数组表示,除非矩阵特别大才会用矩阵的压缩存储。
#include<stdio.h>
#include<limits.h>
const int MAX = INT_MAX; //定义最大值为∞
const int MAX_VER