图的基础知识梳理

图的基础知识梳理

图的定义

图是由顶点集合和顶点之间的边组成的数学结构,图的阶是图中顶点的个数,下图是几种不同的图
有向图

无向图

零图

图的分类

图的分类是以边的不同来分为7类

有向图

有向图指图中每边都是有方向的边的图叫有向图

无向图

无向图指图中每一边都是没有方向的边的图叫无向图

完全图

完全图指图中每一个顶点都与剩下的每个结点相连,这样的图叫完全图

很美丽的图案呢!

稀疏图

稀疏图指图中边的数量少(边数远小于n(n-1)/2或小于nlog(n)(n为边数))的图称为稀疏图

稠密图

稠密图与稀疏图相对,指的是边的数量多(几乎接近完全图)的图成为稠密图

平凡图

平凡图指图中的阶数为1的图是平凡图,阶数大于1的为非平凡图,阶数为0的是空图
平凡图

非平凡图

空图(没错要相信自己的眼睛)

零图

零图指只有顶点没有边的 图叫零图

顶点的度

顶点的度的定义:一个顶点与其相连的边的条数叫做这个顶点的度

上图中顶点5的度为

孤立点

孤立点:度为0的顶点
如上图中的1

叶节点

叶节点:度为1的顶点
如上图中的4

偶点

偶点:度为偶数的顶点
如上图中的2

奇点

奇点:度为奇数的顶点
如上图中的6

图的路径

图的路径是指从一个顶点到另一个顶点所经过的顶点序列
一条路径中,顶点不重复出现的路径叫简单路径
除了起点和终点相同,其余不相同的称为回路或环

图的连通性

无向图

在无向图中,如果一个顶点u到另一个顶点v(u不等于v)存在路径,则称顶点u和顶点v是连通的
若图中任意两个顶点都是连通的,那么称该图为连通图

有向图

在有向图中,如果图中任意两个顶点u和v(u不等于v)存在路径(按其概念),那么称该图为强连通图
若将其转化为无向图后,图中任意两个顶点都是连通的,那么称该图为弱连通图

带权图

在上文讲的基础上,在边上加上有关边的数据(权值),形成带权图

图的储存

图的储存主要分为2种,邻接矩阵、邻接表

邻接矩阵

思路

邻接矩阵是用一个二维数组adj来存储i和j的关系
adj初始化为0

无向图

在无向图中如果i,j连通那么adj[i][j]=adj[j][i]=1,否则adj[i][j]=adj[j][i]=0

上图用邻接矩阵来存为:

下标 1 2 3 4 5
1 0 1 0 0 1
2 1 0 0 0 1
3 0 0 0 1 1
4 0 0 1 0 1
5 1 1 1 1 0
代码
void join (int u,int v) {//u和v相通
    adj[u][v] = 1;
    adj[v][u] = 1;
}
有向图

在有向图中如果i指向j那么adj[i][j]=1,如果n指向i那么adj[j][i]=1,否则adj[i][j]=adj[j][i]=0

上图用邻接矩阵来存为:

下标 1 2 3 4 5
1 0 1 0 0 1
2 0 0 0 0 1
3 0 0 0 1 0
4 0 0 0 0 1
5 0 0 1 0 0
代码
void join (int u,int v) {//从u指向v
    adj[u][v] = 1;
}

时间、空间复杂度

查询是否存在某条边:O(1)
遍历一个点的所有出边:O(n)
遍历整张图:O(n^2)
空间复杂度:O(n^2)

优点

最显著的优点是可以 O(1) 查询一条边是否存在。

邻接表

思路

v1 2 5 null
v2 5 null
v3 4 null
v4 5 null
v5 3 null
代码
struct num {//from 起点,to终点,val权值,next就是指向下一个边
	int from,to,val,next;
};
num  _v[maxm]; 
int head[maxn],cnt;// head数组和cnt就是记录与一个头结点相连的结点的个数
void add (int u,int v,int w) { 
	num e;
	e.from = u;
	e.to = v;
	e.val = w;
	e.to = head[u]; 
	_v[cnt] = e;      
	head[u] = cnt++;     
}

时间、空间复杂度

查询是否存在 u 到 v 的边:O(d^+(u))(如果事先进行了排序就可以使用 二分查找 做到 O(\log(d^+(u))))
遍历点 u 的所有出边:O(d^+(u))
遍历整张图:O(n+m)
空间复杂度:O(m)

优点

适用于需要对一个点的所有出边进行排序的场合

欧拉路

欧拉路的定义:对于一个图,如果按一笔画小游戏的规则画完,那么这个图是一个欧拉路,如果起点和终点相同,那么这被称为欧拉回路
欧拉路

欧拉回路

无向图实现

思路

1.使用邻接矩阵存储
2.单独开数组du[i]记录结点i连边数
3.单独开数组c记录欧拉路上的点

有向图实现

思路

思路和无向图实现差不多
只是要把出度记为1,入度记为-1
欧拉路存在时起点等于1,终点等于-1
欧拉回路存在是所有点等于0

完结撒花

欢迎大家留言
小编蒟蒻一个,有什么问题请大佬不惜赐教Orz

posted @   骆美辰  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
  1. 1 淋雨一直走 张韶涵
  2. 2 一期一会《未闻花名》(Cover 茅野愛衣,戸松遥,早見沙織) 周深
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
淋雨一直走 - 张韶涵
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 姚若龙

作曲 : Henrik Tala/Hermanni Kovalainen/Ilanguaq Lumholt

编曲 : DJ Mobster Productions

制作人 : Jae Chong

Oh~ 人都应该有梦

有梦就别怕痛

有雷声在轰不停

雨泼进眼里看不清

谁急速狂飙

溅我一身 的泥泞

很确定我想去哪里

往天堂要跳过地狱

也不恐惧

不逃避

这不是脾气

这不是脾气

是所谓志气 与勇气

你能推我下悬崖

我能学会飞行

从不听

谁的命令

很独立

耳朵用来听自己的心灵

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

有前面盘旋的秃鹰

有前面盘旋的秃鹰

有背后尖酸的耳语

黑色的童话

是给长大的洗礼

要独特才是流行

无法复制的自己

让我连受伤也有型

这不是脾气

是所谓志气 与勇气

你能推我下悬崖

我能学会飞行

从不听

谁的命令

很独立

耳朵用来听自己的心灵

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

有时掉进黑洞

有时掉进黑洞

有时掉进黑洞

有时候爬上彩虹

在下一秒钟

命运如何转动

没有人会晓得 Oh

我说希望无穷

你猜美梦成空

相信和怀疑

总要决斗

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

OC/OA : Hermanni Kovalainen/Ilanguaq Lumholt/Henrik Tala

配唱制作人 : Jae Chong

配唱制作人 : Jae Chong

计算机程序编写 : DJ Mobster

录音师 : 潘尧泓

录音室 : Lights Up Studio (台北)

混音师 : Jae Chong

混音室 : AZIATIX Studio

OP : Warner/Chappell Music Finland / DJ Mobster Publishing

SP : Warner/Chappell Music Taiwan Ltd.

ISRC TW-R03-12-02003

lock: { enable: true, background: 'https://img1.baidu.com/it/u=2788089125,168843488&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1690563600&t=35fa4326e773b3fbf83562ad746b7cd2',//锁屏背景 strings: [ 'Every win named never give up 每一份胜利都叫不放弃',//签名 ], },
点击右上角即可分享
微信分享提示