动态规划的Warshall和Floyd算法:
来源:互联网 发布:矩阵式组织属于 编辑:程序博客网 时间:2024/06/05 14:18
Warshall算法
简单的讲就是
伪代码:
代码:
package Section8;/*第八章 动态规划 有向图传递闭包的Warshall算法*/public class Warshall { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[][] AdjMat = { {0,1,0,0}, {0,0,0,1}, {0,0,0,0}, {1,0,1,0} }; int[][] BiBao = Warshall(AdjMat); System.out.println("输出表达传递闭包的矩阵:\n"); for(int i = 0;i < BiBao.length;i++) { for(int j = 0;j < BiBao.length;j++) System.out.print(BiBao[i][j] + " "); System.out.println(); } } public static int[][] Warshall(int[][] AdjMat){ //接受一个图的邻接矩阵为参数,返回表达它的传递闭包的矩阵 int[][] Rresult = AdjMat; //初始结果R0 int n = AdjMat.length; for(int k = 0;k < n;k++) //R0到Rn,做n步变换 { int[][] Rtemp = new int[n][n]; //每循环一下求下次结果 for(int i = 0;i < n;i++) for(int j = 0;j < n;j++) { if(Rresult[i][j] == 1) Rtemp[i][j] = 1; else if(Rresult[i][k] == 1 && Rresult[k][j] == 1) Rtemp[i][j] = 1; else Rtemp[i][j] = 0; } Rresult = Rtemp; } return Rresult; }}
时间复杂度为n^3,空间复杂度是n^2。
Floyd算法:Floyd算法可以用于构造无向或有向加权图(不包含长度为负的回路)的完全最短路径:
与Warshall算法基本相同:
伪代码
代码:
package Section8;/*第八章 动态规划 完全最短路径的Floyd算法*/public class Floyd { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[][] WeightMat = { {0,1000,3,1000}, {2,0,1000,1000}, {1000,7,0,1}, {6,1000,1000,0} }; int[][] Result = Floyd(WeightMat); System.out.println("输出表达完全最短路径的矩阵:\n"); for(int i = 0;i < Result.length;i++) { for(int j = 0;j < Result.length;j++) System.out.print(Result[i][j] + " "); System.out.println(); } } public static int[][] Floyd(int[][] WeightMat){ //接受一个图的权重矩阵,返回表达完全最短路径的矩阵 int n = WeightMat.length; int[][] Result = WeightMat; for(int k = 0;k < n;k++) //进行n次变换,每次加入第k个点 { int[][] temp = new int[n][n]; for(int i = 0;i < n;i++) for(int j = 0;j < n;j++) temp[i][j] = min(Result[i][j],Result[i][k]+Result[k][j]);//加入第k个点后路径是否能缩短 Result = temp; } return Result; } private static int min(int m,int n){ if(m < n) return m; return n; }}
0 0
- 动态规划的Warshall和Floyd算法:
- 动态规划-Warshall算法和Floyd算法
- 动态规划3-Warshall算法和Floyd算法
- 动态规划3-Warshall算法和Floyd算法
- 动态规划 warshall算法、 Floyd算法
- 动态规划中Warshall 和 Floyd
- 再看动态规划实现:Warshall算法+Floyd算法
- Floyd-Warshall算法DP(动态规划(dynamic programming))流程详解
- 【动态规划】每对顶点之间的最短路径之Floyd-Warshall算法
- floyd算法和动态规划的关系
- Warshall算法和Floyd算法
- Floyd-Warshall算法的原型
- DP之Warshall算法和Floyd算法
- floyd和warshall算法(作业)
- 算法六:floyd-warshall和dijkstra
- 动态规划——2 Warshall算法
- 探求Floyd算法的动态规划本质
- 探求Floyd算法的动态规划本质
- 数字在排序数组中出现的次数
- Android Service完全解析,关于服务你所需知道的一切(上)
- MySQL 最基本的SQL语法/语句
- [iOS]CocoaPods安装
- HttpClient4.4.1 关于文件上传 中文文件名编码问题
- 动态规划的Warshall和Floyd算法:
- easy_install 错误Setup script exited with error: Unable to find vcvarsall.bat解决方法
- Linux常用命令
- css三个边距对比
- 基于 Android NDK 的学习之旅----- C调用Java
- hash算法在查找、比较中的应用
- discuz X3.2 在用户信息表加一个头像字段(已解决)
- iOS百度推送
- linux配置ip地址(centos7 64bit)