Floyd最短路径算法---多源最短路

package com.xjj.Ah;

/*------只有5行的Floyd最短路径算法---多源最短路---
 * 1.i 到 j 的直接路径可以引入其他 k 节点使其更短
 * 	 先通过 1 节点,a[i][j] > a[i][1]+a[1][j],	
 * 			    则a[i][j] = a[i][1]+a[1][j]
 * 	 再通过 1,2 节点,a[i][j] > a[i][2]+a[2][j],	
 * 			         则a[i][j] = a[i][2]+a[2][j]
 * 	......
 * 	也就相当于引入第三方节点......且1,2已经依次改变
 * 
 * 2.代码实现非常简单
 * 3.时间复杂度是O(N^3)
 * 4.Floyd-Warshall算法不能解决带有“负权回路”(或者叫“负权环”)的图
 * 5.求得任意两点的最短路径,这称为“多源最短路”
 * 
 * 6.此为邻接矩阵
 * */
public class Floyd {
	public static int[][] method(int[][] a,int n){
		for(int k = 0; k < n; k++)
			for(int i = 0; i < n; i++)
				for(int j = 0; j < n; j++)
					if(a[i][j] > a[i][k] + a[k][j])
						a[i][j] = a[i][k] + a[k][j];
		return a;
	}

	public static void main(String[] args) {
		//100代表不通路或无穷大
		int[][] a = {{0,2,6,4},{100,0,3,100},{7,100,0,1},{5,100,12,0}};
		a = method(a, 4);
		
		for(int i = 0; i < 4; i++){
			for(int j = 0; j < 4; j++){
				System.out.print(a[i][j] + "  ");
			}
			System.out.println();
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值