zoukankan      html  css  js  c++  java
  • 最短路--关于对floyd算法的理解

    今天刚学flody算法,上午学的时候感到很头痛,虽然只有3个for循环,但如果不明白其中的含义的话,还是感觉好难受,所以特意花了一下午和一晚上,对flody算法仔细研究了一下。

    先看一下模板代码(此题为无向图):

    #include <stdio.h>
    #include <string.h>
    
    const int oo = 1<<28;//oo相当于inf
    const int maxn = 1001;
    int map[maxn][maxn];
    int n, m;
    
    void floyd(){flody算法
        for(int k = 1; k <= n; k++){
            for(int i = 1; i <= n; i++){
                for(int j = 1; j <= n; j++){
                   // if(i==j||j==k||i==k)continue;
                    if(map[i][k]+map[k][j] < map[i][j]){
                        map[i][j] = map[i][k]+map[k][j];
                    }
                }
            }
        }
    }
    
    void init(){//初始化map数组
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                map[i][j] = oo;
            }
            map[i][i] = 0;
        }
    }
    
    int main(){
        while(~scanf("%d %d", &n, &m)){
            init();
            int u, v, w;
            for(int i = 0; i < m; i++){
                scanf("%d %d %d", &u, &v, &w);
                if(map[u][v] > w){  //  这是一个坑,因为两点之间可能有多条路,即相同的两点之间的权值可能有多个权值。
                    map[u][v] = w;
                    map[v][u] = w;
                }
            }
            floyd();
            scanf("%d %d", &u, &v);
            int res = map[u][v];
            if(res < oo) printf("%d
    ", map[u][v]);
            else puts("-1");
        }
        return 0;
    }
    


    如果你看到这篇博客,说明你对flody有了一定的理解。当然如果不理解也没关系,推荐看一个视频http://www.56.com/u11/v_MjM0NDI1NzI.html  从第11分钟看到第17分钟即可。 其中k呢,相当于你从 i 点 到 j 点,   现在你能用K点了,你算一下从 i 直接到 j 的距离 和 借助于k点,再从 i 到 k ,从 k 到再到  j 的距离  ,比较一下大小,然后取较小者。  时间原因,不能再详写了,如果还有什么不明白的话,可以留言.PS: 欢迎同学们交流分享哈!

     
    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    MVC分部视图@Html.Partial
    MVC分部视图@Html.Partial
    DevExpress ASP.NET
    DevExpress ASP.NET
    @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
    @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
    MVC中@Html.Action的用法(类似自定义控件)
    MVC中@Html.Action的用法(类似自定义控件)
    C#.Net下的防抖Debounce和节流阀Throttle功能实现
    C#.Net下的防抖Debounce和节流阀Throttle功能实现
  • 原文地址:https://www.cnblogs.com/6bing/p/3931272.html
Copyright © 2011-2022 走看看