「写在前面」兄弟萌 ppt动画和视频做起来确实很麻烦 你们看到不到30s的动图 我可能要做上一个小时 要把逻辑和动画完美结合确实有难度 请不要吝啬 点个赞再走吧
图的定义:研究形状和图形数据元素之间的关系,主要谈论几何形体在计算机内部的表示以及期间进行运算的基本方法。
作为程序员(媛)们的知识结晶,怎么可能那么轻易让你理解?
图分为两种:有向图和无向图:
图的存储结构:
此篇文章主要介绍邻接矩阵的图
有向图和无向图的数组表示, 0代表没有弧连接两个顶点,1代表有弧连接两个顶点
注意:节点和弧矩阵是分开存放的
建立连接
当我们要把N1和N2两个节点连接起来时,我们需要将弧矩阵中(1, 2)位置的数据置为1「无向图还需要把(2, 1)位置的数据置为1」
但是我们用的是一个一维数组 那如何表示(1, 2)的索引呢?
不难发现,1 * 节点个数(这里是4) + 2就是(1, 2)在一维数组里的索引
深度优先遍历知乎视频www.zhihu.com
这是实现的递归过程:
可能有些可有可无的步骤被break points吞掉了 不影响知乎视频www.zhihu.com
广度优先遍历知乎视频www.zhihu.com
这是实现的递归过程:
可能有些可有可无的步骤被break points吞掉了 不影响知乎视频www.zhihu.com
要注意的是 我们运行完深度/广度优先遍历其中一种之后,节点的IsVisited会被设置成True 在下一次遍历之前 需要调用reset_node函数 将所有节点的IsVisited置为False
图的普里姆算法和克鲁斯卡尔算法会在下一篇拓展文章中讲 敬请期待
代码:https://github.com/CodingDogzxg/data_structure/blob/master/mymap.pygithub.com