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

Floyd算法

时间:2017-08-12 18:11:35      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:size   oid   问题   span   空间复杂度   ide   dijkstra   i++   时间复杂度   

费洛伊德算法,用于解决任意两点的间最短路的问题,同时也被用于计算有向图的传递闭包。Floyd的时间复杂度为O(n^3),空间复杂度为O(n*n)。所以在运用此方法是,一定要考虑到时间的问题。

那么什么是Floyd算法呢?先来看一组代码。

技术分享
void Floyd()
{
    for (int k = 1; k <= n; k++)//n为节点数。
        for (int j = 1; j <= n; j++)
            for (int i = 1; i <= n; i++)
                per[i][j] = min(per[i][j], max(per[i][k], per[k][j]));
}
View Code

最后的一行代码是不是看着很熟悉,没错。它的原理其实和Dijkstra最后的部分是相似的,比较这一驱节点和另一方向可达距离的大小,而后松弛操作(即更新)。只不过我们把松弛操作和不断移动驱前节点方到一起罢了。

Floyd算法

标签:size   oid   问题   span   空间复杂度   ide   dijkstra   i++   时间复杂度   

原文地址:http://www.cnblogs.com/7750-13/p/7350935.html

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