zoukankan      html  css  js  c++  java
  • #Floyd #多源最短路 ~2020.08.15

    Floyd最短路算法

    思路/大致模板

    d[k, i, j]代表中间只经过从1到k这几个点 的 从i到j 的最短距离。与动态规划有关,k表示状态,但没什么用,就优化掉变成d[i, j]。

    for(k = 1; k <= n;k ++);
    	for(i = 1; i <= n; i ++)
    		for(j = 1; j <= n; j ++)
    			d[i, j] = min(d[i, j], d[i, k] + d[k, j] )
    

    图中不能有负权回路!

    例题

    点这里

    给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。
    
    再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。
    
    数据保证图中不存在负权回路。
    
    输入格式
    第一行包含三个整数n,m,k
    
    接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。
    
    接下来k行,每行包含两个整数x,y,表示询问点x到点y的最短距离。
    
    输出格式
    共k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出“impossible”。
    
    数据范围
    1≤n≤200,
    1≤k≤n2
    1≤m≤20000,
    图中涉及边长绝对值均不超过10000。
    
    输入样例:
    3 3 2
    1 2 1
    2 3 2
    1 3 1
    2 1
    1 3
    输出样例:
    impossible
    1
    
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 210, INF = 1e9;
    
    int n, m, Q;
    int d[N][N];
    void floyd(){
        for(int k = 1; k <= n; k ++)
            for(int i = 1; i <= n; i ++)
                for(int j = 1; j <= n; j ++)
                    d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
    }
    int main(){
        cin >> n >> m >> Q;
        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= n; j ++)
                if(i == j) d[i][j] = 0;
                else d[i][j] = INF;
                
        while(m--){
            int a, b, w;
            cin >> a >> b >> w;
            d[a][b] = min(d[a][b], w);
        }
        floyd();
        while(Q --){
            int a, b;
            cin >> a >> b;
            
            if(d[a][b] > INF / 2) cout << "impossible" << endl;
            else cout << d[a][b] << endl;
        }
        return 0;
    }
    

    最短路算法 完。

  • 相关阅读:
    ctypes运用
    win10 下获取不到
    semantic ui加载慢的问题
    python 将图片转换为base64编码转储进数据库
    循环遍历共享文件夹,不需要知道目录深度拷贝上传
    计划和打算
    pyqt按键检测
    python B+数的实现
    JAVA算数运算符
    ASCLL码表
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026757.html
Copyright © 2011-2022 走看看