Floyd-Warshall算法:求结点对的最短路径问题
来源:互联网 发布:开淘宝店基本知识 编辑:程序博客网 时间:2024/06/16 18:20
Floyd-Warshall算法:是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
原理:
Floyd-Warshall算法的原理是动态规划(DP)。
设D_{i,j,k}为从i到j的只以(1..k)集合中的节点为中间节点的最短路径的长度。
- 若最短路径经过点k,则D_{i,j,k}=D_{i,k,k-1}+D_{k,j,k-1};
- 若最短路径不经过点k,则D_{i,j,k}=D_{i,j,k-1}。
因此,D_{i,j,k}=min{D_{i,k,k-1}+D_{k,j,k-1},D_{i,j,k-1}}。
在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。
三维:
void floyd_dp(){ int i,j,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++) dist[i][j][0]=map[i][j]; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++){ dist[i][j][k]=dist[i][j][k-1]; if(dist[i][k][k-1]+dist[k][j][k-1]<dist[i][j][k]) dist[i][j][k]=dist[i][k][k-1]+dist[k][j][k-1]; } }
二维:
public static void floyd(){ int i,j,k; for(k=1;k<=n;k++){ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if (i!=j && map[i][k]!=INF && map[k][j]!=INF && map[i][k] + map[k][j] < map[i][j]) { map[i][j] = map[i][k] + map[k][j]; } } } }}
- Floyd-Warshall算法:求结点对的最短路径问题
- Floyd-Warshall算法求解所有结点对的最短路径问题Java实现
- Floyd-Warshall(弗洛伊德)算法求所有节点对的最短路径问题
- 算法 结点对的最短路径算法之Floyd-Warshall
- 第25章:所有结点对的最短路径问题—floyd-warshall和Johnson算法
- Poj 1125 Stockbroker Grapevine(Floyd算法求结点对的最短路径问题)
- 每对顶点的最短路径 : Floyd-Warshall 算法
- 所有结点对最短路径问题(Floyd-Warshall算法)——算法导论学习笔记(1)
- 所有节点对最短路径-Floyd-Warshall算法
- 算法——所有节点对的最短路径:Floyd-Warshall算法、Johnson算法
- python解决最短路径问题:Floyd-Warshall算法
- 算法导论第25章 所有结点对的最短路径问题Floyd等
- 所有节点对的最短路径之Floyd-Warshall
- 【算法导论】【Floyd-Warshall 算法】每对节点之间的最短路径
- PKU1125 最短路径 Floyd-Warshall算法
- Dijkstra/Floyd-Warshall 最短路径算法
- Floyd Warshall 弗洛伊德算法---最短路径
- 【动态规划】每对顶点之间的最短路径之Floyd-Warshall算法
- A/D转换 ,数码管的前三位以十进制显示
- 我的博客开张了
- Android之最简单的ImageView加边框方法
- 详解C++中的Boost智能指针
- oracle本机使用一
- Floyd-Warshall算法:求结点对的最短路径问题
- Latex常用代码
- csapp2e 家庭作业 5.20
- 如何在自己电脑上搭建一个无线网络 from 百度
- windows 命令行下查看端口被占用的信息
- 摘录 protobuf
- 算法导论4-5芯片测试
- hdu 2514 Another Eight Puzzle 图填数字 next_permutation+暴力
- 学到maxscript脚本语言的一些操作