在本文中,主要用来记录数据结构考试中,常见以及基础的图的考点。
1 图的常见存储结构
1.1邻接矩阵表示法
我们可以利用矩阵来对图进行存储,矩阵大小为图顶点个数的平法,如果两顶点之间存在路径,矩阵中两顶点所在行列交点为1或者该路径的权值。
以下是用邻接矩阵表示法存储无向带权图
//------图的邻接矩阵存储表示法------
#define MaxInt 32767 //表示极大值,∞
#define MVNum 100 //最大顶点数
typedef char VerTexType; //假设顶点的数据类型为字符型
typedef int ArcType; //假设边的权值类型为整型
typedef struct{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum;
}AMGraph
采用邻接矩阵表示法来创建无向网
1.输入总顶点数和总边数 2.依次输入点的信息存入顶点表中 3.初始化邻接矩阵,使每个权值初始值最大值(无向带权图) 4.构造邻接矩阵。依次输入每条边依附的顶点和权重,确定两个顶点在图中位置之后,使相应边赋予相应的权值,同时使对称边赋予相同的权值。
算法描述
Status CreateUDN(AMGraph &G){
//对邻接矩阵初始化
cin>>G.vexnum>>G.arcnum; //输入总顶点数,总边数
for(i=0;i<G.vexnum;++i) //输入顶点的信息
cin>>G.vexs[i];
for(i=0;i<G.vexnum;++i)
for(j=0;j<G.vexnum;++j)
G.arcs[i][j]=MaxInt; //对所有权值初始化值为∞
//构造邻接矩阵
for(k=0;k<G.arcnum;++k){
cin>>v1>>v2>>w; //输入一条边依附的顶点以及权值
i=LocateVex(G,v1); //找到v1v2在G中位置,即数组下标
j=LocateVex(G,v2);
G.arcs[i][j]=w; //修改边<v1,v2>的权值
G.arcs[j][i]=arcs[i][j]; //修改对称边的权重
}
return OK;
}