数据结构-图

图的逻辑结构:

无向图:

每条边都没有方向,用(Vi,Vj)表示某条边

有向图:

每条边都有方向,用<Vi,Vj>表示A指向B的边

无向图某顶点的度:

与顶点连接的边数

有向图某顶点的度:

入度:流入该顶点的边数
出度:流出该顶点的边数

简单图:

不存在重复的边的图

无向完全图:

图中任意两顶点之间存在边,边的条数为n(n-1)/2,n为顶点数

有向完全图:

图中任意两顶点之间存在方向相反的两条边,边的条数为n(n-1),n为顶点数

带权图(网):

每条边都带有权值的图

子图:

图中任意两个顶点和连接这两个顶点的边的组合体

路径:

路径是一个顶点到另一个顶点序列,路径长度是路径上边的条数

环(回路):

从顶点x(x为图中任一顶点)经过某条路径回到顶点x

简单路径:

序列中顶点不重复出现的路径

简单环:

序列中顶点不重复出现的环

连通图:

无向图中,Vi到Vj有路径,则这两个顶点连通;若任意一对顶点连通,称为连通图

连通分量:

无向图中的极大连通子图

强连通图:

有向图中,Vi到Vj有路径,则这两个顶点连通;若任意的Vi到Vj有路径,称为强连通图

强连通分量:

有向图中的极大连通子图

图的存储结构:

邻接矩阵的理解:

如由5个数字顶点所组成的有向不带权图,我们想要存储这个有向图的顶点信息和顶点之间关系的信息.
首先顶点之间关系有:
0~(0,1,2,3,4)
1~(0,1,2,3,4)
2~(0,1,2,3,4)
3~(0,1,2,3,4)
4~(0,1,2,3,4)
也即顶点关系为25种
如果用一个二维数组表示就是这样:

	0	1	2	3	4
0	x	x	x	x	x
1	x	x	x	x	x
2	x	x	x	x	x
3	x	x	x	x	x
4	x	x	x	x	x
x=1表示<Vi,Vj>存在;x=0表示<Vi,Vj>不存在

将上述图改成有向带权图,如果用一个二维数组表示就是这样:

	0	1	2	3	4
0	x	x	x	x	x
1	x	x	x	x	x
2	x	x	x	x	x
3	x	x	x	x	x
4	x	x	x	x	x
x=X(X∈N*)表示<Vi,Vj>边的权值数;x=∞表示<Vi,Vj>不存在
邻接矩阵:

邻接矩阵的结构体设计:

typedef struct
{
   
	int no;//顶点的下标
}VertexType;

图的结构体设计:

typedef struct
{
   
	//二维数组存放(不带权,有边:1,无边:2;带权,存放边的权值)
	float edges[maxSize][maxSize];
	int n,e;//存放顶点数和边数
	VertexType vex[maxSize];//存放顶点信息(这里只存放了下标)
}MGraph;
邻接表:

边结点的结构体设计:

typedef struct ArcNode
{
   
	int adjV;//邻接顶点
	struct ArcNode* next;//指向下一个边结点的指针
}ArcNode;
图顶点的结构体设计:
typedef struct
{
   
	int data;//顶点信息
	ArcNode* first;//指向头一个边结点的指针
}VNode;

图的结构体设计

typedef struct
{
   
	VNode adjList[maxSize];//存放结点信息
	int n,e;//顶点和边的个数
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值