图 算法笔记

题目一

 邻接表法:以点集为单位。记录每个节点的直接邻居,权值可直接记录下来

 邻接矩阵:以边的角度

 图的表达方式多种多样。

做题时,应该把其他表示图的方法转换自己的熟悉的方法。然后使用对应算法求解 

 图结构

如果图中的节点在解题过程中,只用到了数字,如0-1000号城市,可以采用数组结构代替hash结构。虽然查找都是O(1)的。但是数组常数时间更短

 

 图节点的构造

in out  为入度和出度

nexts是存放的图节点发散出去的邻居节点

edges是存放的图节点发散出去的边 

边的描述

 根据图的描述创建图

 题目二 图的遍历

图的遍历和二叉树不同的地方就是图会有环

 宽度优先遍历

如果是按照宽度优先遍历处理什么。就把打印操作换成处理操作

set为检查是否遍历过的机制

 深度优先遍历

处理数据是在压栈的时候处理  

 碰到没走过的一条路走到底

 题目三

 给一个依赖环境,确定包导入的顺序 来完成整个环境的导入(

 拓扑排序:把入度为0的节点找出,然后擦掉,继续寻找入度为0的节点

 

 题目四 生成最小生成树

最小生成树:把图转化为树,要保证所有点都联通,且权值总和最小

 k算法:先把所有的边的权重都排个序。从最小的边开始加节点。如果形成环则不要。

最开始每一个节点自己都是一个集合,每次看两个节点之间是否属于同一个集合。如果不属于就合并为一个集合。属于则不要

 以下为该功能的简单实现,并没有使用并查集。使用并查集合并的操作是常数级别的

 以下算法实现是并查集的实现。unionFind就是我们创建的类MySets。其中通过比较器来实现对边的排序

 首先确定一个初始节点,把权值最小的边连接的节点放入集合,然后再从新解锁的边和之前的边中选一个最小的边的节点放入集合,如果有就找次小的边所连的节点

 

单元最短路径算法:确定一个初始点。结果输出初始点到每个节点最短的距离是多少

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值