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