标签:开始 ++ 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
标签:开始 ++ bsp blog 最短路径 sys art 直接 数值
原文地址:http://www.cnblogs.com/kangxingyue-210/p/7655407.html