Floyd—Warshall算法
来源:互联网 发布:java nio网络编程 编辑:程序博客网 时间:2024/05/01 05:01
算法描述:
适用于多源最短路问题,是一种动态规划算法,其状态转移方程如下: map[i,j]:=min{map[i,k]+map[k,j],map[i,j]},稠密图效果最佳,边权可正可负。时间复杂度:O(n^3);空间复杂度:O(n^2);
代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn = 1<<30;
const int maxnm=100+10;
int main()
{
int r,c;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
if(i==j) g[i][j]=0;
else g[i][j]=maxn;
}
/*
开始时一个点到它本身的距离自然是零,到其他点的距离初始化为一个很大的数,这个数需要注意,比较的时候别溢出了;
*/
for(int i=1;i<=m;++i)
{
scanf("%d%d",&u,&v,&w);
g[u][v]=w;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
for(int k=1;k<=n;++k)
if(g[j][k]>g[j][i]+g[i][k]) g[i][k]=g[j][i]+g[i][k];
/*
floyd算法的核心,依次选1~n号点尝试进行中转,如果经过这个点i使得两点j,k之间距离减少,则选该点中转,并更新两点之间最短距离,所以最终两个点之间有多少个中转的点并不一定,但两点之间最短距离是一定的;
*/
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
printf("%d ",g[i][j]);
printf("\n");
}
}
- Floyd—Warshall算法
- Floyd-Warshall算法(Floyd-Warshall algorithm)
- Floyd-Warshall 算法
- Floyd-Warshall算法
- poj1125 Floyd-Warshall算法
- Floyd-Warshall算法详解
- Floyd-Warshall算法
- Floyd-Warshall算法
- Floyd-Warshall算法
- Floyd-Warshall算法
- 复习Floyd-Warshall算法
- Floyd-Warshall算法详解
- ACM_Floyd-Warshall (Floyd) 算法
- Floyd-Warshall算法
- floyd-warshall算法
- Floyd-Warshall算法
- Floyd-Warshall算法
- Floyd - Warshall 算法
- 计算机专外Week2-Exercises
- ubuntu下python 2.7与python 3.X的转换
- python把函数作为参数
- 网络编程基础
- 414. Third Maximum Number (java)
- Floyd—Warshall算法
- 问题:Hibernate ,测试类中并没有在控制台打印出sql语句?
- Simple game 【概率期望】
- 菜鸟程序员的超神之路
- WebView:后退按钮的作用,替换成WebView里的查看历史页面
- 命令行编译源文件
- win7部分便笺的元数据已被损坏
- qt5.7.0creator打不开解决办法
- hiho 1496 : 寻找最大值 高维前缀最大&次大