码迷,mamicode.com
首页 > 编程语言 > 详细

Fleury 算法

时间:2020-03-11 19:38:39      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:没有   并且   赋值   一个   方法   关联   最小   代码   目的   

这里对于实验中用到的两个算法进行简单的介绍和理解

Fluery算法

算法简介

福楼里算法(Fleury算法)在图上求欧拉环游的一种方法。

中国邮递员问题实质上是在具有非负的连通图网络G中找出一条最小权的通过所有边的闭途径。当G是欧拉图的时候,问题转化成为在G中确定一条欧拉环游。

算法的基本原则是:每到一点,就沿该点的关联边中从未走过的一条走,当没有其他选择时,才选择未走过边所导出的子图中的割边。

Floyd算法

算法简介

floyd算法可以看作是搜索算法在最短路径的简化算法。即可以通过第三点对所求的a,b两点进行路径距离的优化。而算法的目的就是尽可能多的找到这样的中转点。
我们假定一个邻接矩阵,并且现在只经过1号点,求任意两点最短路程,只需要判断e[i][1]+e[1][j]是不是小于e[i][j],实现这个我们只需要一个简单的遍历代码

 for (i=1;i<n;i++){
    for(j=1;j<n;j++){
        if(e[i][j]>e[i][1]+e[1][j])
            e[i][j] =e[i][1]+e[1][j];
            }
        }
    }

同样的判断2号点,3号点......对于这个过程,再套一个循环,便可以解决,所以最终的算法是

循环k
    循环i
        循环j
            判断 e[i][j]>e[i][k]+e[k][j]
                赋值 e[i][j]=e[i][k]+e[k][j]
            end 判断
        end循环j
    end循环i
end循环k

Dijkstra算法

算法简介

这个算法和Flyod算法比较像,就一并介绍一下。
思路比较简单,算法步骤如下:
—————————————————————————————————
\(S1. 令d(v_1)=0, d(v_j)=w_{ij}(权),s={v_1},R=v \ s=\{v_2...v_p\}\)
\(S2. 在R中寻找一个顶点V_k,使得d(V_k)=min\{d(V_j)\},R=V\S.若R是空集,则结束\)
\(S3. 修正的d(v_j),对R中每个V_j,令d(v_j)=min\{d(v_j),d(v_k)+w_{kj}\}\)
—————————————————————————————————
简单来说就是选中一个点作为起始点,然后在剩余的点里找到去往选中点权最小的点,然后这个点到每个可以抵达选中点的点(不包括已经用过的点和选中点)进行权值比较(即决定是否绕路)。直到无法优化为止。

顺便一提,ford算法和dijstra算法思路差不多,不过在决定是否绕路时,ford算法是和所有点进行优化比较(包括已经用过的点和选中点)。

Fleury 算法

标签:没有   并且   赋值   一个   方法   关联   最小   代码   目的   

原文地址:https://www.cnblogs.com/cmcshenwei/p/Fleury-suan-fa.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!