首页 > 其他分享 >Floyd

Floyd

时间:2024-02-26 16:45:33浏览次数:18  
标签:code cout int Floyd INF include

适用于多源汇求最短路的问题

原理:
基于动态规划

AcWing-854

AC code:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N=510,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;
}

标签:code,cout,int,Floyd,INF,include
From: https://www.cnblogs.com/Eric0521/p/18034661

相关文章

  • 空间转移(dp+倍增+Floyd)
    第2题   空间转移 查看测评数据信息给定一个n个点,m条边的有向图,编号从1到n,所有边权值是1,现在有一个动点从点1开始一动,其每秒钟可以移动2的k次方千米(k是任意自然数,且2的k次方不超过1000000000)。最少需要几秒才能到达n号点。数据保证1到n至少有一条路径。n⩽50,m⩽1000......
  • 全源最短路径——Floyd算法
    目录问题引入思路一览算法原理代码部分问题引入给出一个含有n个点,m条边的图,如何快速的给出任意两个点的最短路径思路一览这个,感觉没啥思路,可能能想到的最暴力的解法就是对每一个点进行dfs遍历,在遍历过程中更新,但是这样的做法肯定是时间复杂度爆炸的;因此还是老算法Floyd香,Floyd......
  • 洛谷题解-P2888 [USACO07NOV] Cow Hurdles S (Floyd)
    https://www.luogu.com.cn/problem/P2888题目描述FarmerJohnwantsthecowstoprepareforthecountyjumpingcompetition,soBessieandthegangarepracticingjumpingoverhurdles.Theyaregettingtired,though,sotheywanttobeabletouseaslittleene......
  • floyd 详解
    解析  模板  第1题    floyd练习查看测评数据信息给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出impossible。数据保证图中不存在......
  • C++U6-03-最短路算法4-floyd算法
    B站复习视频:1、https://www.bilibili.com/video/BV1Fj411d71S/?spm_id_from=333.999.0.02、https://www.bilibili.com/video/BV1RK4y1d7ct?p=1&vd_source=5c960e1ede940bc5cab8ed42c8bdc937学习目标 floyd算法Floyd算法是一种用于找到图中所有节点对之间最短路径的动态规划......
  • floyd 算法——P1119 灾后重建
    floyd算法是图论中较为简单的最短路算法,但在某些方面远超最短路范围。算法思路定义\(f[x][y]\)为\(x\)到\(y\)节点的最短路径。初始化:若存在边\((x,y)\)则\(f[x][y]\)等于边长度;若不存在,为\(+\infty\)。特别的,\(f[x][x]=0\)。我们考虑一下,\(x,y\)这两个节点通......
  • Pink Floyd
    题目链接:https://codeforces.com/problemset/problem/1142/E*3500基本上复读其他题解?因为不知道怎么想到的。首先考虑只有绿的边的情况。竞赛图有一些很好的性质link。根据上面链接中的定理1,我们考虑将最终的竞赛图强连通缩点。由于拓扑序小的点对于每一个拓扑序大的点都有连......
  • 洛谷B3611 【模板】传递闭包 floyd/bitset
    目录floydbitset优化题目链接:https://www.luogu.com.cn/problem/B3611参考题解:https://www.luogu.com.cn/blog/53022/solution-b3611floyd#include<bits/stdc++.h>usingnamespacestd;constintmaxn=101;intn,f[maxn][maxn];intmain(){scanf("%d"......
  • 洛谷B3647 【模板】Floyd 题解 floyd算法 求 多源多汇最短路
    题目链接:https://www.luogu.com.cn/problem/B3647floyd算法:https://oi-wiki.org/graph/shortest-path/#floyd-算法示例程序:#include<bits/stdc++.h>usingnamespacestd;constintmaxn=101;intn,m,f[maxn][maxn];intmain(){scanf("%d%d",&n......
  • Floyd判联通(传递闭包) & poj1049 sorting it all out
    Floyd判联通(传递闭包)Floyd传递闭包顾名思义就是把判最短路的代码替换成了判是否连通的代码,它可以用来判断图中两点是否连通。板子大概是这个样的:for(intk=1;k<=n;k++){ for(inti=1;i<=n;i++){ for(intj=1;j<=n;j++){ //把数值计算替换成逻辑运算——就一行,非......