图论Dijkstra算法模板和应用

编程入门 行业动态 更新时间:2024-10-10 21:33:27

图论Dijkstra<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法模板和应用"/>

图论Dijkstra算法模板和应用

一、使用条件

目的是求图中一个节点(k)到某一个节点的最短距离,或者最大距离,使用Dijkstra算法要求图是加权有向图且没有负权重的边。

输入:加权有向图

输出:一个数组disTo ,代表k到i节点的最短距离。

模板如下

class State{int id;int disFromStart;State(int id,int disFromStart){this.id=id;this.disFromStart=disFromStart;}}int[] dijkstra(int start,List<int[]>[] grahp){int[] disTo=new int[grahp.length];Arrays.fill(disTo,Integer.MAX_VALUE);disTo[start]=0;PriorityQueue<State> pq=new PriorityQueue<>((a,b)->{return a.disFromStart-b.disFromStart;});pq.offer(new State(start,0));while(!pq.isEmpty()){State curNode=pq.poll();int curNodeID=curNode.id;int StartdiscurNode=curNode.disFromStart;if(disTo[curNodeID]<StartdiscurNode) continue;for(int[] linju:grahp[curNodeID]){int nextNodeID=linju[0];int disnextNode=linju[1]+disTo[curNodeID];if(disTo[nextNodeID]<=disnextNode){continue;}else{disTo[nextNodeID]=disnextNode;pq.offer(new State(nextNodeID,disnextNode));}}}return disTo;}

二、应用范围

leetcode743,1631,1514,787

一般有向加权图的输入是三元组[(u,v,w)],代表u到v这条边的权重为w,记录一下三元组转为图的模板。

List<int[]>[] grahp=new LinkedList[n+1];for(int i=1;i<n+1;i++){grahp[i]=new LinkedList<>();}for(int[] edges:times){int from=edges[0];int to=edges[1];int w=edges[2];grahp[from].add(new int[]{to,w});}

times为输入的三元组数组

更多推荐

图论Dijkstra算法模板和应用

本文发布于:2024-03-09 23:00:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1726381.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   模板   图论   Dijkstra

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!