Floyd Warshell 算法求解多源点最短路径
来源:互联网 发布:手机相册软件下载 编辑:程序博客网 时间:2024/05/17 21:43
求解任意两个顶点之间的最短路径,思路:
我们都知道,要使得两个顶点之间的路径变短,可以通过添加第三个顶点的方式来达到。即i到k,k到j使得路径变短,有的时候还要通过添加多个顶点来实现,基于这个原理
假设一开始只允许通过1顶点进行变换路径,那么只需要判断e[i][1]+e[1][j]和e[i][j]的大小,不断更新,i 和 j都是从1到n,同理,继续使得可以通过的顶点变多,变为1,2顶点,推理过程一样,继续下去,1,2,3.。。。 顶点,最终求得任意两个顶点的最短路径,通过一个三重循环即可,下面上代码:
import java.util.*;public class Main {static Scanner in = new Scanner(System.in);static int INF = 99999999;static int[][] matrx = new int[100][100];static int n,m; public static void main(String[] args) {while(in.hasNext()){ n = in.nextInt(); m = in.nextInt(); for (int i = 1; i <=n; i++) {for (int j = 1; j <= n; j++) {if(j==i) matrx[i][j]=0;else matrx[i][j]=INF;}} for (int i = 0; i <m; i++) { matrx[in.nextInt()][in.nextInt()]=in.nextInt();} //k代表可以允许通过的顶点 for (int k = 1; k <= n; k++) { //i,j表示任意两个顶点的尝试for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if(matrx[i][k]+matrx[k][j]<matrx[i][j])matrx[i][j]=matrx[i][k]+matrx[k][j];}}} //打印最后结果表 for (int i = 1; i <=n; i++) {for (int j = 1; j <= n; j++) { System.out.print(matrx[i][j]+" ");}System.out.println(); } } }}//结果示例//4 8//1 2 2//1 3 6//1 4 4//2 3 3//3 1 7//3 4 1//4 1 5//4 3 12//0 2 5 4 //9 0 3 4 //6 8 0 1 //5 7 10 0
阅读全文
0 0
- Floyd Warshell 算法求解多源点最短路径
- 最短路径之Floyd-Warshell算法
- 最短路径之Floyd-Warshell算法
- 算法基础 - 多源点最短路径(Floyd算法)
- 最短路径算法1—多源点Floyd
- floyd算法求解最短路径
- dijkstra算法求解单源点最短路径
- Dijkstra求解单源点最短路径
- 多源点最短路径
- 弗洛伊德(Floyd)算法求解图的最短路径
- Floyd算法求解所有顶点间的最短路径
- python实现 Floyd算法求解最短路径距离问题
- 最短路径多源点Flod-Warshall算法
- 单源点最短路径----Dijkstra算法
- 单源点最短路径(dijkstra算法)
- Bellman-ford算法求解单源点最短路径初始版本
- Floyd算法:用动态规划求解多源(全源)最短路径
- dfs实现单源点最短路径求解
- 扩展二进制数
- gcc指定链接库路径后还是找不到库文件
- 寻找k个数组的最小区间
- 10:判决素数个数(1.13编程基础之综合应用)
- poj1006 Biorhythms(CRT)
- Floyd Warshell 算法求解多源点最短路径
- 题目41-三个数从小到大排序
- 鸡蛋队列
- 十五、bootstrap-table editable
- 栈的压入、弹出序列java实现
- centOS7安装mysql
- 几种实用的跨域方法原理
- redux深入理解之中间件(middleware)
- PHP关于access_token失效问题