
算法
yexis
这个作者很懒,什么都没留下…
展开
-
最短路径:用最通俗的话讲述Dijkstra算法
Dijkstra算法 主要思路: 找到源点,找到离源点最近的点,然后根据该最近的点去更新其他离源点的距离(因为其他点可能通过该点中转)。然后离源点的次近点,找到次近点之后,再根据该次近点去更新其他点到源点的距离,以此类推,找到离源点第n近的点,然后去更新 其他可能通过该点中转后离源点更近的点 离源点的距离。 数据结构: dis []int:各个点离源点的最短距离 v []int:各个点是否访问过 步骤: 初始化:找到源点src,计算所有点距离src的距离,生成数组dis;以及初始化访问数据v,src原创 2020-09-17 11:23:11 · 345 阅读 · 0 评论 -
最小生成数之KrusKal算法,浅显易懂
KrusKal算法的主要思路: 与Prim算法不同的是,Prim算法是以顶点作为单元来进行考虑,而KrusKal是以边为单位进行考虑。 将邻接矩阵中的所有数据解析成<m,n,l>的结构(这里称为点边式),其中m和n分别为两个顶点,l为两顶点的权值。将所有点边式按权值大小从小到大依次排序。然后遍历所有的点边式,并做如下判断: 如果该点边式的两点m、n同源(说明m和n属于同一棵树),跳过 如果该点边式的两点不同源,则合并(合并方法比较随便,将n的根设为m的根即可) 至于什么是同源,即两个顶点属原创 2020-09-16 16:54:03 · 413 阅读 · 0 评论 -
最小生成树之Prim算法,浅显易懂
Prim算法主要思路: 抽象(假想:假设存在,但不存在)出两个集合,V 和Vnew 最开始,所以的图节点都在集合V中 如果一个节点加入到了最小生成树中,则将该节点加入到Vnew(即Vnew保存的是最小生成树中的节点) 说明: Vnew即最小生成树 Prim算法主要维护三个数组 lowcost []int,表示V中的节点,离Vnew中所有节点的最短距离。如果节点已经加入到了Vnew中,则置为-1 latest []int,表示V中的节点,离Vnew中最近的节点的序号,如果节点已经加入到了Vn原创 2020-09-16 12:58:50 · 400 阅读 · 0 评论