zoukankan      html  css  js  c++  java
  • 最短路(FLOYD)

    题目描述

    给n个点的有向图,和q次询问,每次询问两点间最短路的长度。

    第一行两个数n和q,接下来一个n×n的矩阵,第i行第j列的数表示从i到j的边权,接下来q行,每行两个数i和j,表示询问从i到j的最短路。

    n≤50,q≤1000,边权≤2,000,000,000。

    样例输入

    3 6
    0 1 100
    1 0 100
    1 1 0
    1 2
    1 3
    2 1
    2 3
    3 1
    3 2

    样例输出

    1
    100
    1
    100
    1
    1

     很明显,这是一道多源最短路(FLOYD),模版题主要就是讲一下FLOYD的思路。

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <cstdlib>
    #include <iostream>
    #define N 510
    using namespace std;
    typedef long long ll;
    ll n,q,a,b;
    ll mp[N][N];
    int main() {
        scanf("%lld%lld",&n,&q);
        for (ll i = 1 ; i <= n ; i++)
        for (ll j = 1 ; j <= n ; j++) 
        {
            scanf("%lld",&mp[i][j]); //数组存图
            if (i == j)
                mp[i][j] = 0;
        }
        for (ll k = 1 ; k <= n ; k++)
            for (ll i = 1 ; i <= n ; i++)
                for (ll j = 1 ; j <= n ; j++)
                    mp[i][j] = min(mp[i][k] + mp[k][j],mp[i][j]); //FOLYD的基本思路
                                        //当前的距离与中间的一个点做媒介,比较他们的大小找最小的
    for (ll i = 1 ; i <= q ; i++) { scanf("%lld%lld",&a,&b); printf("%lld ",mp[a][b]);//输出数据 } return 0; }
  • 相关阅读:
    API接口的安全设计验证—ticket,签名,时间戳
    能上QQ,浏览器不能上网?
    jQuery 获取元素当前位置offset()与position()
    USB Type-C工作原理解析
    利用SVN工具下载OpenCore代码
    内存数据保存到文件
    oracle07
    oracle06
    oracle05
    oracle04--伪列
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8494962.html
Copyright © 2011-2022 走看看