dijkstra算法 java最短路径
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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){
●初始化
●Set
●Map
●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(Map ●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)。