• Floyd 模板 & [FZYZOJ 1318] 最短路


    就当做一个Floyd的模板来练练手吧

    P1318 -- [NOIP福建夏令营]最短路

    时间限制:1000MS

    内存限制:131072KB

    Description

    给出N个点,M条无向边的简单图,问所有点对之间的最短路。

    Input Format

    第1行两个正整数N,M(N<=100,M<=5000) 下面M行,每行3个正整数x, y, w,为一条连接顶点x与y的边权值为w。(x<=n,y<=n,w<=1000)

    Output Format

    包括N行,每行N个数,第i行第j个数为点i到点j的最短路,第i行第i个数应为0,数字之间空格隔开。

    Sample Input

    5 10
    3 2 1
    2 4 7
    5 3 4
    4 1 2
    5 1 8
    3 4 10
    5 4 9
    2 5 2
    1 2 1
    3 1 10
    

    Sample Output

    0 1 2 2 3
    1 0 1 3 2
    2 1 0 4 3
    2 3 4 0 5
    3 2 3 5 0

    【题解】

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,dis[101][101];
    int main() {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) dis[i][j]=2100000;
        for (int i=1;i<=m;++i) {
            int a,b,w; scanf("%d%d%d",&a,&b,&w);
            dis[a][b]=dis[b][a]=w;
        }
        for(int i=1;i<=n;++i) dis[i][i]=0;
        for (int k=1;k<=n;++k)
            for (int i=1;i<=n;++i) 
                for (int j=1;j<=n;++j)
                    if(dis[i][k]+dis[k][j]<dis[i][j]) dis[i][j]=dis[i][k]+dis[k][j];
        for (int i=1;i<=n;++i) {
            for (int j=1;j<=n;++j) printf("%d ",dis[i][j]); 
            printf("
    ");
        }
        return 0;
    }
    View Code

    Floyd的裸题,来练练手

    这篇文章由TonyFang发布。 所有解释权归TonyFang所有。 Mailto: tony-fang@map-le.net
  • 相关阅读:
    android 如何在手机上 安装两个同样的app
    Ubuntu 16.04 安装Gitlab
    VScode开发C++常用插件
    过滤text字段为空的数据
    ES标签搜索并解决评分排序问题
    3
    2
    1
    9
    Maven3种打包方式
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/floyd.html
Copyright © 2020-2023  润新知