图是由顶点和边组成,直接存储比较困难,但是可以对顶点和边分别存储。顶点可以用一个一维数组存储顶点信息。边或弧是顶点之间的关系,可以用一个二维数组来存储。邻接矩阵法就是用这种方法来存储图的。
图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组来存储图中顶点的信息,一个二维数组(称为邻接矩阵)用来存储图中的边或弧的信息。
我们先来看无向图的邻接矩阵存储方式。
①无向图的邻接矩阵存储方式
设图有n个顶点,则邻接矩阵就是一个n×n的矩阵。
例:
矩阵主对角线全为0是因为顶点不存在到自身的边;arc[0] [2] 和 arc[2] [0]都为0是因为顶点a、c之间没有边;其他都为1是因为其他顶点两两之间都只有一条边。
从邻接矩阵中可以容易看出图中的信息。
②有向图的邻接矩阵
例:
判断顶点vi到vj有没有弧只要看arg[i] [j]是否等于0即可。
顶点的入读是其所在列各数之和;出度是所在行各数之和。
③网的邻接矩阵
网的邻阶矩阵定义为:
其中Wij表示(vi,vj)或<vi,vj>上的权值。
∞表示一个计算机允许的、大于所有边上权值的值,就是个大不可能的极限值,相当于电路中两个结点间电阻无限大表示断开,不用0是因为有时候权值就是0,这里表示两个节点间没有边或弧。
如: