图 Graph

本文介绍了图的邻接矩阵和邻接表表示方法,详细阐述了广度优先搜索(包括其过程、结果和应用)、深度优先搜索及其在拓扑排序中的作用。此外,还讨论了如何通过贪心算法实现最小生成树(如Prim算法),以及在有向无环图中使用Dijkstra算法求解单源最短路径。

关键词:图、邻接矩阵、邻接表、广度优先搜索、最短路径、深度优先搜索、拓扑排序、最小生成树、单源最短路径、Dijkstra算法、

图的表示

图的两种表示方法:邻接矩阵表示和邻接表表示。

图的广度优先搜索

可处理无向图或有向图

从起始顶点s出发的广度优先搜索(遍历所有顶点,只需要对每个顶点调用一次该函数):将顶点分成3类:

1 未遍历到的白色;

2 第一次被遍历到的灰色;

3 从一个灰色顶点v的外围找白色顶点,找到的都设置为灰色,此时这个v遍历完成,遍历完成设置成黑色;

4 起始点s加入队列Q,灰色顶点都要加入Q,只要Q不空就继续;

广度优先遍历结果

1 广度优先搜索遍历到过程会生成一颗根节点为s的树。

2 树上的每个顶点都有一个距离,表示这个顶点离起始顶点的边的个数。

3 广度优先搜索的结果就是单源最短路径(即,路径长度为经过的边的个数,边的权均为1)。

图的深度优先搜索

深度优先搜索是一个递归函数,总是优先对第一次遍历到底灰色顶点接着去遍历灰色顶点的邻接白色顶点。

可处理无向图或有向图

深度优先搜索的结果

1 深度优先搜索的结果按照父子节点得到拓扑排序(无回路图)

最小生成树

贪心算法

有n个元器件,用n-1个导线将他们连起来(无向图)。

Prim算法,从一个顶点开始加入已经遍历的集合,每次从连接已经遍历集合和未遍历集合的边里面选长度最短的那条边加入即可。

单源最短路径

有向无环图,边上的权非负

Dijkstra算法(贪心算法)

每次选一个距离最近的顶点进来,用这个最近的顶点的边,更新外围可达顶点到源点的距离。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值