Floyed-Warshall算法(求任意两点间最短距离)
Posted caijiaming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Floyed-Warshall算法(求任意两点间最短距离)相关的知识,希望对你有一定的参考价值。
思路:感觉有点像暴力啊,反正我是觉得很暴力,比如求d[i][j],用这个方法求的话,就直接考虑会不会经过点k(k是任意一点) ,最终求得最小值
看代码
#include<iostream> #include<cstdio> #include<cstring> #include<stdio.h> #include<string.h> #include<cmath> #include<math.h> #include<algorithm> #include<set> #include<queue> #include<map> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e3+10; const int maxk=100+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f int v,e; ll d[maxn][maxn];//cost[u][v]代表边(u,v)的权值,不存在时初始化无穷大,同一点为0 bool vis[maxn]; void solve() { for(int i=0;i<v;i++) { for(int j=0;j<v;j++) { for(int k=0;k<v;k++) d[j][k]=min(d[j][k],d[j][i]+d[i][k]); } } for(int i=0;i<v;i++) { for(int j=i+1;j<v;j++) cout<<i<<" "<<j<<" "<<d[i][j]<<" "<<endl; } } int main() { ios::sync_with_stdio(false); cin>>v>>e; for(int i=0;i<v;i++) { for(int j=0;j<v;j++) d[i][j]=INF; d[i][i]=0; } int a,b,va; for(int i=0;i<e;i++) { cin>>a>>b>>va; d[a][b]=va; } solve(); return 0; }
以上是关于Floyed-Warshall算法(求任意两点间最短距离)的主要内容,如果未能解决你的问题,请参考以下文章
任意两点间最短距离floyd-warshall ---- POJ 2139 Six Degrees of Cowvin Bacon