数据结构与算法(图)

14 阅读2分钟

在本文中,主要用来记录数据结构考试中,常见以及基础的图的考点。

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;		
}