/*
名称:图的两种存储方式–邻接矩阵和邻接表
说明:根据不同的用途,可以用不同的存储结构来描述图。
(1)对于临接矩阵来说,其相对简单些。但是一般来说其存储密度并不高, 对于无向图来说,如果不用
压缩存储,那么至少浪费了一般的空间。其空间复杂度为O(N2)(N为顶点的个数)。比较适合与存储稠密图。
它容易判断两个顶点之间是否有边。但判断一个顶点的出度和入度就较为复杂些,需要扫描一行或一列。
(2)、对于临接表来说,其存储结构相对临接表要复杂些。不仅包括边表,还有顶点表。一般适合于存储稀疏 图。
它比较容易找到顶点的出度,但是判断两个顶点是否右边则需要扫描一个顶点的所有边表。对于顶点的所有出度其也不太容易找到,需要扫描整个临接表。这个问题可以通过存储逆邻接表或者十字交叉表来解决。
*/
//邻接矩阵存储结构定义
typedef struct gragh
{
VexType Vex[MaxVertexNum]; //顶点表
int Edge[MaxVertexNum][MaxVertexNum]; //临接矩阵、边表
//int weigh; //权值
int vexnum,arcnum; //图的当前的顶点数和弧树
}MGraph;
//边表结点
typedef struct ArcNode
{
int adjvex; //该弧所指向的顶点的位置
struct ArcNode *next; //指向下一条弧的指针
//int info; //网的边的权值
}ArcNode;
//顶点表结点
typedef struct VNode
{
VexType vex; //顶点信息(此处为字符类型)
ArcNode * first; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MaxVertexNum]; //结构体数组定义所有顶点表结点
//邻接表存储的图类型
typedef struct
{
AdjList vertices; //邻接表
int vexnum,arcnum; //图的顶点数和弧数
}ALGraph;