我们都知道线性表一对一,树是一对多,可是我们的图确是多对多,这意味着每一个结点相连接的结点数不确定,图的存储就成了问题,不过,我们的前辈们已经解决了,我们只需要领会这些伟大的成就!
今天说一说邻接矩阵,我们 都知道,每一个图结构都是由若干个结点和边组成的,合并在一起存储很有难度,那我们分开存储呗,图的结构可没主次之分,每一个顶点都是等价的,因此使用一个一维数组存储很不错,但是仔细想想,一条边需要两个顶点,描述的是两个顶点的关系,那就用个二维数组存储吧,我们用横纵两个坐标式的矩阵存储图结构,这个矩阵成为邻接矩阵,邻接矩阵的每一个值用来表示边的信息,对于有向图,用1表示有变,0表示无边,加上一位数组装着的顶点-顶点数组,图结构完美被表示出来了,这里要注意!!对角线都是0,因为我们研究的都是简单图!注意:无论是1还是0其实就是我们前面介绍的类似权,如果是带有权值的有向图,1的位置替换为这条边的权值。其实对于有向图也是类似,有向图由横指向纵,由弧,就用这条弧的权重代表,如果没有同方向的弧,用一个极大值符号无限大符号代替,如果是对角线,用0代表。完美的表示方法,将边和顶点分开表示,又不影响他们的逻辑关系。
下面看源码表示:
#define MAXN 100
bool visited[MAXN];
//邻接矩阵
//表定义
typedef struct
{
char vexs[MAXN