图的概念和存储


图的基本概念

定义

图是有顶点V的集合和边E的集合组成的二元组记G=(V,E)。

无向图

顶点之间没有方向

无向图

有向图

顶点之间的边有方向
有向图

带权图

顶点之间的边为某种含义的数值,如两点间的距离或花费等等。带权图

完全图

图中每两个顶点之间都存在一条边

对于无向图来讲,边的总数为n*(n-1)/2。
对于有向图来讲,边的总数为n*(n-1)。
完全图

顶点的度

图中连接该顶点的边数,对于有向图来讲,以该顶点为终点的数量为入度,以该顶点为起点的数量为出度。

邻接点

图中一条边的两个顶点,如下图中v1邻接点有v2,v4,v5。

邻接点例子

路径、路径长度、回路

图中两个顶点之间存在一个顶点序列,则表示两个顶点之间有一条路径,路径长度指路径上的数目,回路指该路径的第一个顶点和最后一个顶点相同。如上图v1和v3有多条路径,v1->v4->v5->v1形成一条回路。

连通图

图中任意两个点都联通(存在路径),连通分量,强连通等(略)。

图的存储

图的存储相对来讲比较复杂,既要考虑构成图的顶点,又要考虑顶点之间的边的信息,常见的存储方式有邻接矩阵邻接表

邻接矩阵

A[ i,j ]
1(或权值):表示顶点i和顶点j有边(i和j的路程)。
0:表示顶点i和顶点j无边。

也可以用非常大(权值不会达到)的数值来表示无边,1或权值表示有变,0表示自己到自己。

邻接表

邻接表对图中的每一个顶点建立一个邻接关系的单链表,将每个但链表的表头的指针保存在一个数组中,方便随机访问任意一个顶点的链表。

下面用邻接矩阵和邻接表表示为:
图

邻接矩阵

邻接矩阵

邻接表

邻接表
思考:图的邻接矩阵和邻接表表示的优缺点,欢迎在评论区发表自己的想法。

邻接矩阵程序实现

邻接表需要用到vector,我只会写vector的 ,参考好多人对STL不太熟练就不写了。

#include<iostream>
using namespace std;
int g[101][101];
int main(){
	int i,j,n,m,a,b;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a>>b;
		g[a][b]=1;
		g[b][a]=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<g[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值