数据结构知识点复习(四)

本文详细介绍了图的相关概念,包括有向图与无向图的区别,连通图、连通分量、强连通图等。重点讨论了图的存储结构,如邻接矩阵和邻接表,并分析了其时间复杂度。此外,还涵盖了图的遍历方法,如深度优先搜索和广度优先搜索,以及图的应用,如最小生成树的构造算法Prim和Kruskal,以及拓扑排序的方法和环的检测。

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

第6章 图

在有向图中,顶点用尖括号,在无向图中,顶点用圆括号
例如<x,y>和<y,x>是不相同的,但是(x,y)和(y,x)是相同的。

在图中,一般用n来表示顶点的数目,用e来表示边的数目

无向完全图和有向完全图:
无向完全图:边的数目为n(n-1)/2
有向完全图:边的数目为n(n-1)
:带权的图往往称为网
入度和出度的概念是对于有向图而言的。在有向图中,所有顶点的入度和出度之和的1/2为图的边数
路径长度:是一条路径上通过边的条数
连通、连通图、连通分量:有路径——连通 在图中,任一顶点都有路径——连通图
无向图中的极大连通子图——连通分量
在这里插入图片描述
强连通图和强连通分量:是相对于有向图而言的。
连通图的生成树:一个极小连通子图,他包含图中的所有顶点,但是只有足以构成一棵树的n-1条边
在这里插入图片描述
如果一个图有n个顶点和小于n-1条边,那一定是非连通图,如果他多于n-1条边,那一定有环。

有向树和生成森林:只有一个点的入度为0,其余点的入度均为1的有向图称为有向树
生成森林:由若干棵有向树组成,且互不相交
在这里插入图片描述
6.4图的存储结构
6.4.1邻接矩阵表示法
在这里插入图片描述
若图是网,则可以这样表示:
在这里插入图片描述
用邻接矩阵来表示图,除了用一个二维数组表示点之间关系之外,还需要用一个一维数组来存储顶点

#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;	//假设顶点的类型是char型
typedef int ArcType;		//假设边的权值类型是int
typedef struct
{
	VerTexType vexs[MVNum];
	ArcTexType arcs[MVNum][MVNum];
	int arcnum,vexnum;
}AMGraph;

采用邻接矩阵法创建无向网:时间复杂度0(n^2)

Status CreatUND(AMGraph &G)
{
	cin>>G.arcnum>>G.vexnum;
	for(int i=0;i<vexnum;i++)  //依次输入顶点信息
		cin>>G.vexs[i];
	for(int i=0;i<vexnum;i++)
	{
		for(int j=0;j<vexnum;j++)
		{
			G.arcs[i][j]=MaxInt;
		}
	}
	for(int k=0;k<G.arcnum;k++)
	{
		cin>>v1>>v2>>w;  //输入一条边依附的顶点和权值
  		i=LocateVex(G,v1);
  		j=LocateVex(G,v2);
  		G.arcs[i][j]=w;
  		G.arcs[i][j]=G.arcs[j][i];	//无向网
	}
	return OK;
}

在这里插入图片描述
6.4.2邻接表表示法
邻接表是图的一种链式存储结构。
邻接表由两部分组成:表头节点表和边表
(1)表头节点表:由所有的表头节点以顺序存储的形式存储,以便可以随机访问任一顶点的边表。表头节点包括数据域和链域,其中数据域用于存储顶点 v i v_i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值