2024/2/18 图论 最短路入门 floyd 1

目录

Floyd求最短路

854. Floyd求最短路 - AcWing题库

模板】Floyd

B3647 【模板】Floyd - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


Floyd求最短路

854. Floyd求最短路 - AcWing题库

思路:在代码里面

完整代码:

#include <bits/stdc++.h>
#define int long long
signed main()
{
    int n,m,t;
    std::cin >> n >> m >> t;
    int dist[n+1][n+1];
    //初始化
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= n;j ++)
        {
            if (i==j)
            {
                dist[i][j]=0;
            }
            else
            {
                dist[i][j]=INT_MAX;
            }
        }
    }
    for(int i = 1;i <= m;i ++)
    {
        int u,v,w;
        std::cin >> u >> v >> w;
        dist[u][v]=std::min(dist[u][v],w);// u 到 v 的边权重为w,但是注意可能有多条边,取最小
    }
    for(int k = 1;k <= n;k ++)//枚举中间点
    {
        for(int i = 1;i <= n;i ++)//枚举起点
        {
            for(int j = 1;j <= n;j ++)//枚举终点
            {
                dist[i][j]=std::min(dist[i][j],dist[i][k]+dist[k][j]);
            }
        }
    }
    while(t --)
    {
        int x,y;
        std::cin >> x >> y;
        if(dist[x][y]>INT_MAX/10)// 因为有负数边可能会轻微改变INT_MAX的值,但其实并不能达到,所以不能判断是否等于INT_MAX,如果没有负数边则可以直接判断
            std::cout<<"impossible\n";
        else
            std::cout<<dist[x][y]<<"\n";
    }
    return 0;
}

模板】Floyd

B3647 【模板】Floyd - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:用floyd算法

注意是无向边,需要建立一个双向边

完整代码:

#include <bits/stdc++.h>
#define int long long
signed main()
{
    int n,m;
    std::cin >> n >> m;
    int dist[n+1][n+1];
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= n;j ++)
        {
            if(i==j)
            {
                dist[i][j]=0;
                dist[j][i]=0;
            }
            else
            {
                dist[i][j]=INT_MAX;
                dist[j][i]=INT_MAX;
            }
        }
    }
    for(int i = 1;i <= m;i ++)
    {
        int u,v,w;
        std::cin >> u >> v >> w;
        dist[u][v]=std::min(dist[u][v],w);
        dist[v][u]=std::min(dist[v][u],w);
    }
    for(int k = 1;k <= n;k ++)
    {
        for(int i = 1;i <= n;i ++)
        {
            for(int j = 1;j <= n;j ++)
            {
                dist[i][j]=std::min(dist[i][j],dist[i][k]+dist[k][j]);
                dist[j][i]=std::min(dist[j][i],dist[k][i]+dist[j][k]);
            }
        }
    }
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= n;j ++)
        {
            std::cout<<dist[i][j]<<" ";
        }
        std::cout<<"\n";
    }
    return 0;
}

相关推荐

  1. 2024/2/18 短路入门 floyd 1

    2024-02-19 10:32:02       33 阅读
  2. 备战蓝桥杯---短路Floyd算法

    2024-02-19 10:32:02       33 阅读
  3. 2024/2/18 短路入门 dijkstra 2

    2024-02-19 10:32:02       38 阅读
  4. Floyd

    2024-02-19 10:32:02       13 阅读
  5. 算法————短路径——Floyd / 传递闭包

    2024-02-19 10:32:02       32 阅读

最近更新

  1. C++继承

    C++继承

    2024-02-19 10:32:02      0 阅读
  2. ArcGIS Pro SDK (八)地理数据库 2 定义

    2024-02-19 10:32:02       0 阅读
  3. 面试题 12. 矩阵中的路径

    2024-02-19 10:32:02       1 阅读
  4. 算法整理——【贪心算法练习(2)】

    2024-02-19 10:32:02       1 阅读

热门阅读

  1. 2024/2/18 图论 最短路入门 dijkstra 2

    2024-02-19 10:32:02       38 阅读
  2. 【图论经典题目讲解】洛谷 P5304 旅行者

    2024-02-19 10:32:02       32 阅读
  3. fabric-contract-api-go快速上手

    2024-02-19 10:32:02       32 阅读
  4. k8s的一些关键信息(归类摘抄,非提炼)

    2024-02-19 10:32:02       24 阅读
  5. Latex一些报错问题总结

    2024-02-19 10:32:02       27 阅读
  6. vue3导入文件夹、导入文件、导出zip、导出

    2024-02-19 10:32:02       35 阅读
  7. 单例模式的优点和缺点分别是什么?

    2024-02-19 10:32:02       29 阅读
  8. 微服务- 熔断、降级和限流

    2024-02-19 10:32:02       32 阅读
  9. CSS如何将图片变为圆形?

    2024-02-19 10:32:02       28 阅读
  10. tcpdump

    2024-02-19 10:32:02       27 阅读