最短路径(dijistra)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径(dijistra)相关的知识,希望对你有一定的参考价值。

思路:

矩阵法:

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)的主要内容,如果未能解决你的问题,请参考以下文章

最短路练习

贪心算法之Prim

日日算法:Dijkstra算法

最短路径

地铁最短路径代码分析

(王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想代码演示答题规范)