floyd算法回顾 http://ideone.com/R8ixAH
只需要一个矩阵保持最短距离;
假设n各节点。
1 枚举每个节点t 作为中间节点,也称作松弛节点 O(n)
{
2 枚举每个开始节点i O(n)
{
3 枚举每个结束结束节点j O(n)
{
判断当前已知的i到j的距离是否比经过t节点长,如果是,修改ij距离。O(1)
}
}
开销是O(n*n*n)
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int dis[110][110];
int main()
{
int n,m;
cin>>n>>m;
memset(dis,0x0f,sizeof(dis));
int v,u,d;
for(int i=0;i<m;i++)
{
cin>>v>>u>>d;
v--;
u--;
dis[v][u]=min(dis[v][u],d);
dis[u][v]=min(dis[u][v],d);
}
for(int t=0;t<n;t++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
{
dis[i][j]=0;
continue;
}
dis[i][j] = min(dis[i][j],dis[i][t]+dis[t][j]);
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<dis[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
# 1089 最短路径·二:Floyd算法 hihocoder http://ideone.com/R8ixAH
原文:http://www.cnblogs.com/tjsudys/p/5399941.html