dijkstra算法 java最短路径

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

dijkstra算法java最短路径

Dijkstra算法是一种用于寻找图中两个节点之间最短路径的算法。它采用的是贪心策略,将图中的节点分为两个集合:已访问节点集S和未访问节点集T。算法从源节点开始,每次从T中选择到源节点距离最短的节点加入S集合,并更新S集合中各节点到源节点的最短路径。直到T集合中的节点全部加入S集合,算法结束。

Dijkstra算法的Java实现如下:

●public class Dijkstra{

●public static void main(String[]args){

●创建图

●Graph graph=new Graph();

●graph.addVertex("A");

●graph.addVertex("B");

●graph.addVertex("C");

●graph.addEdge("A","B",10);

●graph.addEdge("A","C",20);

●graph.addEdge("B","C",30);

●计算最短路径

●dijkstra(graph,"A");}

●private static void dijkstra(Graph graph,String startVertex){

●初始化

●Setvisited=new HashSet<>();

●Mapdistances=new HashMap<>();

●for(String vertex:graph.getVertices()){

●distances.put(vertex,Integer.MAX_VALUE);}

●distances.put(startVertex,0);

●遍历所有节点

●for(String vertex:graph.getVertices()){

●找到未访问节点中距离源节点最小的节点

●String nearestVertex=findNearestVertex(distances,visited);

●将该节点加入已访问节点集合

●visited.add(nearestVertex);

●更新该节点到其他节点的最短路径

●for(String neighbor:graph.getAdjacentVertices(nearestVertex)){

●intnewDistance=distances.get(nearestVertex)+graph.getEdgeWeight(nearestVertex,neighbor ●if(newDistance

●distances.put(neighbor,newDistance);}}}

●输出结果

●System.out.println("从"+startVertex+"到其他节点的最短路径:");

●for(String vertex:graph.getVertices()){

●System.out.println(vertex+"的最短路径是:"+distances.get(vertex));}}

●private static String findNearestVertex(Mapdistances,Setvisited){

●int minDistance=Integer.MAX_VALUE;

●String nearestVertex=null;

●for(String vertex:distances.keySet()){

●if(!visited.contains(vertex)&&distances.get(vertex)

●minDistance=distances.get(vertex);

●nearestVertex=vertex;}}

●return nearestVertex;}}

该算法的工作原理如下:

1.初始化距离表,将所有节点的距离初始化为无穷大。

2.从源节点开始,将源节点的距离设为0。

循环遍历所有节点:

●找到未访问节点中距离源节点最小的节点。

●将该节点加入已访问节点集合。

●更新该节点到其他节点的最短路径。

●循环结束后,距离表中存储的就是从源节点到所有节点的最短路径。

●该算法的时间复杂度为O(n^2),空间复杂度为O(n)。

相关文档
最新文档