Dijkstra 算法


public class Dijkstra {
	public static int[] dijkstra(int[][] graph,int start){
		int[] dis=new int[graph.length];
		boolean[] flag=new boolean[graph.length];
		Arrays.fill(dis,Integer.MAX_VALUE);
		dis[start]=0;flag[start]=true;
		for(int i=0;i<graph.length;i++){
			dis[i]=graph[start][i];
		}
		for(int k=0;k<graph.length-1;k++){
			int pos=-1;int min=Integer.MAX_VALUE;
			for(int i=0;i<dis.length;i++){
				if(!flag[i]&&dis[i]<min){
					pos=i;min=dis[i];
				}
			}
			if(pos==-1) return dis;
			flag[pos]=true;
			for(int i=0;i<dis.length;i++){
				if(graph[pos][i]!=Integer.MAX_VALUE&&dis[pos]!=Integer.MAX_VALUE&&dis[pos]+graph[pos][i]<dis[i]){
					dis[i]=dis[pos]+graph[pos][i];
				}
			}
		}
		return dis;
	}
	public static void main(String[] args) {
		int[][] edges={
				{1,2,10},
				{1,4,30},
				{1,5,100},
				{2,3,50},
				{3,5,10},
				{4,3,20},
				{4,5,60}
		};
		int[][] graph=new int[5][5];
		for(int i=0;i<graph.length;i++){
			Arrays.fill(graph[i],Integer.MAX_VALUE);
			graph[i][i]=0;
		}
		for(int i=0;i<edges.length;i++){
			graph[edges[i][0]-1][edges[i][1]-1]=edges[i][2];
		}
		int[] re=dijkstra(graph,0);
		System.out.println(Arrays.toString(re));
//		5
//		7
//		1 2 10
//		1 4 30
//		1 5 100
//		2 3 50
//		3 5 10
//		4 3 20
//		4 5 60
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值