Floyd算法的java实现
来源:互联网 发布:物业软件 编辑:程序博客网 时间:2024/05/18 01:49
Floyd算法:用于多源最短路径的求解,算出来的是所有的节点到其余各节点之间的最短距离。
该算法的思路是:首先初始化距离矩阵,然后从第一个点开始逐渐更新矩阵点值。d[i][j]表示从i点到j点的距离。第k次更新时,判断d[i][k]+d[k][j]与d[i][j]的大小,如果前者小,则更新这个值,否则不变。
给一个例子:
具体的floyd实现算法如下:
package com.blyang;public class Floyd {int[][] Matrix;char[] Nodes;private final int INF = Integer.MAX_VALUE;public Floyd(char[] Nodes, int[][] Matrix){this.Nodes = Nodes;this.Matrix = Matrix;}public void floyd(){int[][] distance = new int[Nodes.length][Nodes.length];// 初始化距离矩阵for(int i=0; i<Nodes.length; i++){for(int j=0; j<Nodes.length; j++){distance[i][j] = Matrix[i][j];}}//循环更新矩阵的值for(int k=0; k<Nodes.length; k++){for(int i=0; i<Nodes.length; i++){for(int j=0; j<Nodes.length; j++){int temp = (distance[i][k] == INF || distance[k][j] == INF) ? INF : distance[i][k] + distance[k][j];if(distance[i][j] > temp){distance[i][j] = temp;}}}}// 打印floyd最短路径的结果 System.out.printf("floyd: \n"); for (int i = 0; i < Nodes.length; i++) { for (int j = 0; j < Nodes.length; j++) System.out.printf("%12d ", distance[i][j]); System.out.printf("\n"); }}}
在实现之后,针对上图的点和权值,给定一个测试:
package com.blyang;public class Main {public static void main(String[] args) {int INF = Integer.MAX_VALUE;char[] Nodes = {'0', '1', '2', '3'}; int matrix[][] = { /*A*//*B*//*C*//*D*/ /*A*/ { 0, 1, 2, 1}, /*B*/ { INF, 0, INF, INF}, /*C*/ { INF, 3, 0, 1}, /*D*/ { INF, 1, 1, 0}, }; int[] dist = new int[Nodes.length]; Floyd floyd = new Floyd(Nodes, matrix); floyd.floyd();}}
0 0
- java实现的floyd算法
- Floyd算法的java实现
- Java实现Floyd算法
- Floyd算法(java实现)
- Dijkstra算法和Floyd算法的实现
- Java实现"最短路径FLOYD算法”
- Floyd算法求最短路径,JAVA实现
- 弗洛伊德(Floyd)算法 Java实现
- 多源最短路径( Floyd算法)JAVA实现
- floyd最短路径算法的实现
- Floyd算法的原理和实现
- 备战国赛--Floyd算法的实现
- 图论最短路径算法-Floyd算法-JAVA代码实现
- floyd算法实现
- Floyd算法Cpp实现
- PHP实现Floyd算法
- python实现Floyd算法
- 图论算法——基于的java实现(dijkstra,bfs,dfs,floyd)
- 拓扑排序
- 大尾端小尾端
- 设计模式:桥接模式(Bridge)
- request.getParameter() 和request.getAttribute() 区别
- 通过命令查询并关闭占有端口的任务
- Floyd算法的java实现
- 最短路径算法
- 嵌入式Linux编译器gcc使用
- [译]Android高级技巧: Renderscript优化模糊效果
- mac上同时安装多个jdk,选择版本
- JAVA中关于DATE时间日期加减、String与Date类型的转换
- Linux学习笔记1
- List,Set,Map
- 【java基础概念】(2016/3/28)