18910140161

dijestra Dijkstra算法的Java实现

顺晟科技

2021-08-28 09:43:11

196

标题说明:

求解给定图形、每个给定顶点之间的路径长度、图形一个节顶点到任意节顶点的最短距离。

解决问题的想法:

戴尔使用Dijkstra算法解决最短路径,Dijkstra算法使用宽度优先搜索和贪心策略解决单一源最短路径。选择最接近起始顶点的顶点,以该顶点为中心调整起始顶点到周围顶点的最短距离,并继续重复和修改起始顶点到任何顶点的权重,直到完成修改。

示例图标:

详细的故障排除步骤:

1.将每个顶点之间的路径长度信息存储在二维数组中,然后确定起点,并调用参数获取最短路径的方法。

公共静态voidmain (string [] args)

{

Test Test=new Test();

Int MAX=Integer。MAX _ VALUE-10000;

Int[][] weight={

{0,1,12,max,max,max},

{MAX,0,9,3,MAX,MAX},

{MAX,MAX,0,MAX,5,MAX},

{4,0,13,15,MAX,MAX},

{MAX,MAX,MAX,MAX,0,4},

{MAX,MAX,MAX,MAX,MAX,0}

}

Int Start=0;//选择起点

int[]sp=test . getshortpath(weight,start);

system . out . print ln(arrays . tostring(sp));

}

2、定义存储每个顶点是否已访问的数组。初始化为0。因为我们从节点0出发,将0号顶点设置为访问。

int[]visit=new int[weight . length];//显示节点是否可访问

FOR(Int I 3360 Visit)///最初标记为未访问

visit[I]=0;

Visit [开始]=1;

3、分别访问循环中的每个顶点,并继续修改权重。

FOR(INT K=1;K=weight . length-1;K) //确定循环中最短路径的新节点,一次一个

1

4、选择不可见且最接近起点的顶点。

Int dmin=Integer。MAX _ VALUE

int position=0;

//寻找最接近起点的未显示节点

FOR(INT I=0;Iweight.lengthI)。

{

if(visit[I]==0 weight[start][I]dmini!=start)

{

DMIN=Weight[Start][I];

位置=I;

}

}

System.out.println('选择最短路径:' dmin '位置:' position);

//表示节点已被访问

Visit [位置]=1;

5、修改从出发顶点经过这个顶点到其他顶点的最短路径。

FOR(INT I=1;Iweight.lengthI)。

{

if(weight[start][position]weight[position][I]weight[start][I]I!=位置)

{

System.out.println('以前的最短路径到' I '距离为3360 ' weight[start][I]);

System.out.println('两者' weight [start] [position],' weight[position][I]);

weight[start][I]=weight[position][I]weight[start][position];//最短路径更新

System.out.println(“更新最短路径”I’距离为3360’weight[start][I]);

}

}

6、循环,直到所有顶点都被访问。最后,获取并返回从出发顶点到每个顶点的最短路径阵列。

int[]shortpath=new int[weight . length];

FOR(INT I=0;Iweight.lengthI)。

ShortPath[I]=weight[0][I];

Return shortPath

运行结果:

[0,1,10,4,15,19]

顶点到自身的最短路径为0,其余顶点的最短路径分别为1、10、4、15、19。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航