图的遍历

本文介绍了图这种复杂数据结构,以及如何使用邻接矩阵和邻接表来存储图。针对稀疏图和稠密图,讨论了邻接矩阵和邻接表的适用场景。此外,文章详细讲解了图的两种遍历方法:深度优先搜索(DFS)和广度优先搜索(BFS),并提供了相应的算法描述。最后,给出了图结构基本操作的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图是一种比线性表和树更为复杂的数据结构。图的存储结构虽然没有顺序结构,但是它可以借助二维数组来表示元素之间的关系,即邻接矩阵表示法。图的链式存储有多种,邻接表、十字链表和邻接多重表。
用邻接矩阵表示法表示图,除了一个用于存储邻接矩阵的二维数组外,还要一个一维数组来存储顶点信息。
【形式说明】

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

用一个邻接矩阵表示法创建无向网
【算法描述】

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;kk<G.arcnum;++k)
	{
   
		cin>>v1>>v2>>w;  //输入一条边依附的顶点以及权值
		i=LocateVex(G,v1);j=LocateVex(G,v2);  //顶点数组的下标
		 G.arcs[i][j]=w;
		 G.arcs[j][i]=G.arcs[i][j];  //对称边
	}
	return OK;
}

但是,邻接矩阵表示法对于稀疏图就不大适用,相对邻接表而言,邻接矩阵更适合表示稠密图,而稀疏图则用邻接表表示更合适。
图的邻接表结构说明如下:

#define MVNum 100  //最大顶点数
typedef struct ArcNode   //边结点
{
   
	int adjvex;  //该边指向的顶点的位置
	struct ArcNode *nextarc;   //指向下一条边的指针
	OtherInfo info;   //和边相关的信息(可以不定义)
}ArcNode;
typedef struct VNode
{
   
	VerTexType data;
	ArcNode *firstarc;  //指向第一条依附该顶点的边的指针
}VNode,AdjList[MVNum];
typedef struct
{
   
	AdjList vertices;
	int vexnum,arcnum;   //当前图的顶点数和边数
}ALGraph; 

基于上述的邻接表表示法创建无向图
【算法描述】

Status CreateUDG(ALGraph &G)
{
   
	cin>>G.vexnum>>G.arcnum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值