Floyd 算法
Floyd 算法
1.Floyd算法介绍
Floyd算法是最短路问题里的一种,用来求任意一对顶点之间的最短路径。时间复杂度为
2.Floyd算法经典题目
给定一个
再给定 impossible。
数据保证图中不存在负权回路。
输入格式
第一行包含三个整数
接下来
接下来
输出格式
共 impossible。
数据范围
图中涉及边长绝对值均不超过
输入样例:
3 3 2 1 2 1 2 3 2 1 3 1 2 1 1 3
输出样例:
impossible 1
3.Floyd算法思路
基于动态规划实现。
如果我们已经知道了图中任意两点间只允许以编号
核心代码
if(d[i][k]+d[k][j]<d[i][j]) d[i][j]=d[i][k]+d[k][j]
4.Floyd算法代码
#include<iostream> using namespace std; const int N=205; int n,m,k; 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>>k; 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]=0x3f3f3f3f;//否则存正无穷 for(int i=1;i<=m;i++){ int a,b,w; cin>>a>>b>>w; d[a][b]=min(d[a][b],w); } floyd(); for(int i=1;i<=k;i++){ int x,y; cin>>x>>y; if(d[x][y]>0x3f3f3f3f/2) cout<<"impossible"<<endl; else cout<<d[x][y]<<endl; } return 0; }
完awa~
如果觉得还行就给个赞吧,您的支持就是本蒟蒻最大的动力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探