408-数据结构-图遍历&最小生成树prim&Kruskal

图的操作

最重要的两个:

  1. FirstNeighbor(G,x):获取到该结点第一个领接点。
  2. NextNeighbor(G,x, y):返回领接点的下一个。

广度优先遍历

类似树的广度优先一层一层,图的广度优先,第一个走一步到达地方,走两步到达地方。算法思想就是在上一步到达的点,再走一步走向领接点遍历。依旧使用队列实现
图选定一个结点能够生成广度优先生成树或者森林。

与树遍历不同点:

  1. 树往下走一定是没有访问过的结点,图不一定,需要设定记录数组,记录访问过的点。
  2. 图有可能是非连通图,所以需要在原有代码基础上遍历一遍结点,查看每一个结点是否都遍历过。

深度优先

与树深度优先类似,有深度优先生成树或森林。可以递归可以用栈,不同点与广度优先相同。

最小生成树

prim算法

最小生成树:带权图的生成树重路径权重总和最小。
prim算法构造最小生成树,主要出发点是结点。算法过程:

  1. 设立一个集合,设为空,随便选一个点加入集合
  2. 遍历其他点,查看哪一个结点到达该集合花费最小,也就是到达集合随便一个点就行。
  3. 选取花费最小结点加入集合。循环直到所有结点加入集合。

时间复杂度:O(|V|^2).

代码过程:

  1. 开两个数组,一个是否选择,一个最低花费数组
  2. 随便选一个点加入,修改选择数组
  3. 然后在其余没有被选择的点里面根据最低花费数组选择点加入
  4. 根据加入点更新选择数组与最低花费数组
  5. 循环2直至所有点结束

Kruskal算法

Kruskal出发点主要是边,每一次选取某一端结点未被选定的最小边。

算法过程:

  1. 设立结点集合,初始化为空
  2. 选择一条有某一端不在集合的最小边
  3. 循环直到所有点进入集合

时间复杂度O(|E|log|E|)。log|E|是边的两端结点进行并查集查操作所花费的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值