图由结点的有穷结合V和边的集合E组成。为了与树形结构进行区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对。若两个顶点之间存在一条边,则表示这两个顶点具有相邻的关系。
图通常有两种存储方式,即邻接矩阵和邻接表。
下面介绍一下邻接矩阵。设G=(V,E)是具有n个结点的图,顶点序号依次为0,1,2,3、、、n-1。G的邻接矩阵是具有如下定义的方阵A:
A[i][j]=1表示顶点i与顶点j邻接,即i与j之间有一条边或者弧。
A[i][j]=0表示顶点i与顶点j不邻接
邻接矩阵是图的顺序存储结构。
邻接矩阵的结构型定义如下:
struct VerType{
int no;//顶点的编号
char info;//顶点的其他信息
};
struct MGraph{
int n,e;//结点数目与边数
int edges[maxn][maxn];//邻接矩阵的定义
int VerType[maxn]; //存放结点的信息
};
关于邻接表的形式:
struct ArcNode{
int adjvex;//这条边所指向的结点信息
struct ArcNode *nextarc;//该顶点指向下一条边的指针
int info;//这条边的相关信息如权值
};
struct VNode {
char data;//顶点信息
ArcNode *firstarc;//指向第一条边的指针
};
struct Agraph{
VNode adjlist[maxn];//邻接表
int n,e;//顶点数目和边数
};