图的存储必须要完整、准确的反映顶点集和边集的信息。采用不同的存储方式对程序的效率产生相当大的影响,所以要选取适合求解的问题
如果题目给知”对称矩阵“ ,
若不是”对称矩阵“,那么必然不可能是无向图
是指用一个一维数组存储图中顶点的信息,用一个
二维数组(称为邻接矩阵)存储图中边或弧的信息(即各顶点之间的邻接关系)


空间复杂度: 0(|V|) —— 只和顶点数相关,和实际的边数无关
对称矩阵:n阶矩阵的元素满足aij = aji,(0<=j, j<=n);从矩阵的左上角到右下角的主对角线为轴,右上角的元素与左下角对应的元素对应全都是相等的。
无向图的邻接矩阵一定是对称矩阵(并且唯一),因此,在存储时只需要存储上(或下三角)
关于a12和a24的解释:
a12对应的是1(即第一行第二列),1说明从A->B有一条边
a24对应的是1(即第二行第四列),1说明从B->D有一条边
a12 乘 a24等于1(隐含的意思我们可以找到一条路径,从A->B->D 这一条路径是存在的)
关于a13和a34的解释:
a13对应的是0(即第一行第3列),0说明从A->C不存在路径
a34对应的是0(即第三行第4列),0说明从C->D不存在路径
关于A的平方[1][4]=1: 说明当A->D路径为2的时候,只能找到一条路径符合条件的;


其实就是把平方在乘上原本的矩阵就可以成为三次方
解释:
取三次方的 “a14”为例子:
1·0意思是:A平方的的第一行第一列对应的是1,乘上A的第一行第四列
1·0意思是:1表示的是 从A->A长度为2的路径有1条
0的意思是从A->D长度为1的路径有0条
1·0=0,因此我们没办法把这两段路径凑齐来形成 A->D长度为3的路径
a14对应的是1(即第一行第二列),1说明从A->B有一条边
此前谈过孩子表示法,将结点存入数组,并对结点的孩子进行链式存储,不管有多少个孩子,也不会存在空间浪费问题,我们将这种数组与链表相结合的存储方法称为邻接表法
对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧)
每个链表上附设一个表头结点:
头结点:

有向图与无向图的邻接实例:


十字链表是有向图的一种链式存储结构。在十字链表中,对应于有向图中的每条弧都有一个结点,对应于每个顶点也有一个结点




当要删除A与B相连的边的时候:


