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: 欢迎同学们交流分享哈!

     
    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    keepalived 打印日志
    mysql 主从切换
    mysql 开启只读 普通用户无法写入
    主从复制同步mysql数据库后会导致从上用户无法登陆
    MySQL性能优化的最佳20+条经验(1)
    MySQL性能测试工具之mysqlslap
    关于ad所用端口
    mysql 从设置只读
    ARP表信息引起的telnet 时断时通
    Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.
  • 原文地址:https://www.cnblogs.com/6bing/p/3931272.html
Copyright © 2011-2022 走看看