码迷,mamicode.com
首页 > 其他好文 > 详细

最短路径(dijistra)

时间:2017-10-12 13:01:16      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:开始   ++   bsp   blog   最短路径   sys   art   直接   数值   

思路:

矩阵法:

1、先设置一个矩阵,设M为不可到达,每行为一个顶点到其他顶点的距离;

2、dijistra为从一个顶点开始,逐步扩展到其他区域,设置顶点start;

3、初步设置最短距离distance[]为从顶点直接其他点的距离;

4、求顶点start->k->顶点的距离,数值仍有distance[顶点]记录,由shortpath[顶点]记录从start点到顶点的最短路径。

5、输出结果。

       static int M=10000; //不可到达,不可设置为int类型最大值,否则下面相加时会出错      
       public static void main(String[] args){
                //设置一个图
		int[][] weigth={
				{0,13,M,6,11},//V0到V0,V1,V2,V3,V4
				{13,0,3,M,9},//V1到V0,V1,V2,V3,V4
				{M,3,0,17,3},
				{6,M,17,0,4},
				{11,9,3,4,0}
		};
		
		//起始点start
		int start=0;

		//最短路径:
		dijistra(weigth,start);
	}    
        private static void dijistra(int[][] weigth, int start) {
		int len=weigth.length;//顶点数
		int[] distance=new int[len];//从start点到其他点的最短距离
		String[] shortpath =new String[len];//从start到其他顶点的最短路径
		for(int i=0;i<len;i++){
			distance[i]=weigth[start][i];//初步设置最短距离
			shortpath[i]="->";//设置为短路径
		}
		
		for(int i=0;i<len;i++){//遍历每个顶点
			for(int j=0;j<len;j++){//遍历每个顶点到其他点的距离
				if(distance[j]>distance[i]+weigth[i][j]){//distance[j]为最短的点
					distance[j]=distance[i]+weigth[i][j];//过k到顶点的最短距离
					shortpath[j]=shortpath[i]+i+"->";//过k到顶点的最短路径
				}
			}
		}
		
		//显示输出
		for(int i=0;i<len;i++){
			System.out.println("从"+start+shortpath[i]+i+":"+distance[i]);
		}
		
	}

  输出结果:

从0->0:0
从0->1:13
从0->3->4->2:13
从0->3:6
从0->3->4:10

 

最短路径(dijistra)

标签:开始   ++   bsp   blog   最短路径   sys   art   直接   数值   

原文地址:http://www.cnblogs.com/kangxingyue-210/p/7655407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!