@[TOC]

图算法

1、图的表示

1.1、邻接矩阵(有向图、无向图、带权图、代码实现)

1、无向图的邻接矩阵

2、有向图的邻接矩阵

3、带权值的图

有了上述的理解,我们可以设计数据结构,并实现了。C++实现如下:

#include

1.2、 邻接表

1、邻接表的提出

2、无向图的邻接表

3、有向图的邻接表(分出边表、入边表)

4、带权图的处理

有了上面的邻接表的理解,我们可以实现代码(java):

package 

1.3、 十字链表与邻接多重表

1、十字链表——解决有向图邻接表结构缺点

2、邻接多重表——解决无向图邻接表结构,边的删除麻烦问题

1.4、边集数组

2、图的遍历

2.1、DFS(深度优先搜索、递归算法)

基于邻接矩阵的DFS

template

由于是邻接矩阵存储结构,算法时间复杂度O(n^2^)

基于邻接表的DFS

template

邻接表使得算法复杂度为O(n+e),n为顶点个数,e为边数。

2.2、BFS(宽度优先搜索、优先队列)

对边搜索、不断延展。 邻接矩阵的BFS

void 

邻接表的BFS

void 

2.3、小结

3、寻找最小生成树(两个贪心算法)

实际问题:

3.1、Prim算法(分割法、贪心策略:寻找集合中的顶点所连接边中最小权值边)

贪心策略、算法分析

template

3.2、 Kruskal算法(边集数组、每次从剩余边选择最小权值边)

图解分析:

基于分析我们可以写出代码:

template

运行结果:

4、最短路径问题

4.1、单源最短路径问题(给定一个点,求到其余各个点的距离)

4.1.1、迪杰特斯拉(Dijkstra)算法(贪心算法)

很像prim算法,利用集合,寻找最短路径。但是有区别。而且用途也不同。这是一个贪心算法。

基于理解上的算法实现 :

template

未优化的算法复杂度很高

4.1.2、Floyd算法(动态规划)

4.1.3、Bellman-Ford 算法

无向图的深度优先遍历非递归_图算法总结相关推荐

  1. 无向图的深度优先遍历非递归_【数据结构图(一)】什么是图

    一.什么是"图"(Graph) 表示"多对多"的关系 包含 一组顶点:通常用 V (Vertex) 表示顶点集合 一组边:通常用 E (Edge) 表示边的集合 ...

  2. 无向图的深度优先遍历非递归_LeetCode0429: N叉树的层序遍历

    题目介绍 描述: 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历:[[1],[3,2,4],[5,6] ]说明:树的深度不会超过 ...

  3. 无向图的深度优先遍历非递归_LeetCode133-克隆图(附详细测试用例构建方法)

    今天最最最开心激动的一件事 就是自己的论文终于出版了 虽然是一篇口碑不好的文章 但还是有些激动啊 千里之行始于足下 希望自己有个好的前景 题目描述: 给你无向 连通 图中一个节点的引用,请你返回该图的 ...

  4. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...

    1 packageSolution;2 3 importjava.util.LinkedList;4 importjava.util.Queue;5 importjava.util.Stack;6 7 ...

  5. 二叉树后序遍历_二叉树后序遍历非递归实现

    二叉树的后序遍历非递归实现是三种遍历实现里面最复杂的一种了. 后序遍历的顺序是左节点-右节点-根节点,因为二叉树每个节点只有指向子节点的指针而没有指向父节点的指针,因此我们需要一个额外的变量来记录是否 ...

  6. 2021 - 10 -7 ! 二叉树的前序、中序、后序遍历 非递归思路(迭代版本)

    //! 前序遍历的非递归版本,精髓在于用栈模拟递归的过程,但实际进栈出栈顺序与递归并不一样, //! 比较抽象,建议画图理解,比较重要 void BinarySearchTreesZH::preord ...

  7. 二叉树前序、中序、后序遍历非递归写法的透彻解析

    前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历.递归写法,只要理解思想,几行代码.可是非递归写法却很不容易.这里特地总结下,透彻解析它们的非递归写法.其中,中序遍历的非递归写法最简 ...

  8. 二叉树后序遍历(非递归)

    原文地址为: 二叉树后序遍历(非递归) 二叉树的递归遍历算法就不用说了:在非递归算法中,后序遍历难度大,很多书上只给出思想或者几段无法直接调试的代码,甚至有些书上是错的,当时我在研究的过程中,就是按着 ...

  9. java二叉树深度优先遍历会考不递归的吗_树的广度优先遍历和深度优先遍历(递归非递归、Java实现)...

    在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程.现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.广度优先遍历 英文缩写为BFS即B ...

最新文章

  1. 在vue中获取微信支付code及code被占用问题的解决?
  2. 利用__index和__newindex实现默认值表、监控表、只读表(转)
  3. Windows 技巧篇-电脑蓝光过滤,颜色校准调节蓝光,电脑源头过滤蓝光,保护眼睛,护眼软件原理
  4. long类型20位示例_Java Long类lowerOneBit()方法与示例
  5. the params of sys aud mod req msgs from TV
  6. FTP安装及用户及权限配置
  7. Linux学习笔记(七):Shell与Shell Script
  8. php7 mysql部署_windows上apache+php+mysql环境部署(php7安装失败,勿模仿!!)
  9. adprw指令通讯案例_PLC编程入门,编写控制程序必掌握选型指令
  10. 2022迅雷ios版下载beta
  11. 复制文件或文件夹时出错_为什么对于小白来说,复制文件一个都会出错???...
  12. 使用Microsoft Network Monitor分析Wireshark无法解析的SSL流量包
  13. FastReport 打印二维码多一位
  14. reactHooks中使用events全局通信
  15. 他们竟用后台数据偷窥喜欢的女性!Facebook一年半解雇52名工程师
  16. 市场调研报告-全球与中国教育互动白板市场现状及未来发展趋势
  17. Perculia for Mac(苹果电脑蓝牙助手)
  18. 充足理由律-存在即合理
  19. 爬取动态网页(qq音乐)
  20. android 系统语言切换,Android系统切换语言更新应用界面方法

热门文章

  1. java分隔符 字符串_用Java构建带分隔符的字符串的最佳方法是什么?
  2. Java ObjectInputStream registerValidation()方法与示例
  3. ai怎么约束每个字的大小_人工智能的约束满意问题
  4. 第 4-2 课:反射和动态代理 + 面试题
  5. linq to js使用汇总
  6. python 多线程 popen ping指定IP是否在线 判断连通
  7. 利用MFC按钮使能(或禁用)属性使按钮变正常色(或灰色)
  8. java 队列复制_复制一个文件夹里的文件到另一个目录下 (使用队列的方法实现)...
  9. iphone6s发布会_iPhone 6S/SE升级iOS 13性能测试:App启动速度比iOS 12.4.1慢
  10. dockerfile 修改文件权限_网易技术实践|Docker文件系统实战