码迷,mamicode.com
首页 > 其他好文 > 详细

最短路(FLOYD)

时间:2018-03-02 22:09:02      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:names   return   多源   pos   namespace   ring   str   scan   就是   

题目描述

给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\n",mp[a][b]);//输出数据 } return 0; }

 

最短路(FLOYD)

标签:names   return   多源   pos   namespace   ring   str   scan   就是   

原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8494962.html

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