两点间最短路 java_AcWing 850. Dijkstra求最短路 II_Java实现含详细注释

import java.io.*;

import java.util.Arrays;

import java.util.Comparator;

import java.util.PriorityQueue;

public class Main {

static final int N = 150010;

static int n, m; //结点数,边数

static int[] h, e, ne, w; //邻接表适合表示稀疏图,w用来存每个边权重

static int idx;

static int[] dist;

static boolean[] status = new boolean[N]; //是否已确定最短路,最好直接赋值,这样默认是false

static final int DIST = 0x3f3f3f3f; //>10^9,大于所有距离之和,可用来表示正无穷

//升序比较器

static Comparator> cmp = new Comparator>() {

public int compare(Pairss p1, Pairss p2) {

return (int)p1.getKey() - (int)p2.getKey();

}

};

//默认最小堆,由于内容是Pairss,因此需要比较器。

//用堆来存储结点的距离和编号,被更新过距离的边会被加入堆,表示可到达

static PriorityQueue> heap = new PriorityQueue<>(cmp);

public static void main(String[] args) throws IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));

String[] s = reader.readLine().split(" ");

n = Integer.parseInt(s[0]);

m = Integer.parseInt(s[1]);

h = new int[n+1];

e = new int[m];

ne = new int[m];

w = new int[m];

dist = new int[n+1];

Arrays.fill(h, -1);

Arrays.fill(dist, 1,n+1,DIST);

//不需要对重边和自环做特殊处理,因为算法保证了最短路

while (m-- != 0) {

s = reader.readLine().split(" ");

int a = Integer.parseInt(s[0]);

int b = Integer.parseInt(s[1]);

int c = Integer.parseInt(s[2]);

add(a,b,c);

}

int t = dijkstra();

log.write(t + "");

log.flush();

log.close();

reader.close();

}

private static void add(int a, int b, int c) {

e[idx] = b;

w[idx] = c;

ne[idx] = h[a];

h[a] = idx++;

}

private static int dijkstra() {

dist[1] = 0;

heap.add(new Pairss<>(0,1)); //1号点,距离为0

while(!heap.isEmpty()) {

Pairss t = heap.remove();

int ver = t.getValue(); int distance = t.getKey();

if(ver == n) break; //结点n已经确定最短路,结束程序

if(status[ver]) continue; //该值是个冗余备份,pop出的这个结点已经确定最短路径,因此可以continue了

status[ver] = true; //将这个被选中的结点状态设置为true,表示加入已确定最短路径的点的集合

for (int i = h[ver]; i != -1; i = ne[i]) { //更新该结点的出边指向的点的距离

int j = e[i];

if(dist[j] > distance + w[i]) {

dist[j] = distance + w[i];

heap.add(new Pairss<>(dist[j],j));

}

}

}

if(dist[n] == 0x3f3f3f3f) return -1;

return dist[n];

}

}

class Pairss {

private T1 key;

private T2 value;

public Pairss(T1 t1,T2 t2) {

key = t1;

value = t2;

}

public T1 getKey() {

return key;

}

public T2 getValue() {

return value;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口

今天用Oracle的驱动教大家如何从SQL Server链接到Oracle. 1. 服务器上需要安装Oracle 64位的客户端或者服务端&#xff0c;安装过程就省略了。不会的同学可以网上搜索一下安装方法&#xff0c;很详细&#xff0c;这里不赘述。 安装完成后SQL Server的访问接口上会新增”OraOLE…

Tomcat 内存调大

第一种方法&#xff1a;Windows下&#xff0c;在文件/bin/catalina.bat&#xff0c;Unix下&#xff0c;在文件/bin/catalina.sh的前面&#xff0c;增加如下设置&#xff1a;JAVA_OPTS-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】需要把这个两个参数值调大。例如&#xf…

java spring bean配置文件_Spring基于xml文件配置Bean过程详解

这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下通过全类名来配置&#xff1a;class&#xff1a;bean的全类名&#xff0c;通过反射的方式在IOC容器中创建B…

win10升级后chrome碰到对话框就卡死

低版本的 chrome 会出现这样的问题 解决方法&#xff1a; 设置-------高级设置-----取消硬件加速

客户端SDK测试思路

本文来自网易云社区作者&#xff1a;万春艳是什么客户端SDK是为第三方开发者提供的软件开发工具包&#xff0c;包括SDK接口、开发文档和Demo示例等。SDK和应用之间是什么关系呢&#xff1f;以云信即时消息服务为例&#xff0c;如下图所示&#xff0c;应用客户端通过调用云信SDK…

nginx could not build the server_names_hash 解决方法

原文地址&#xff1a;http://www.jb51.net/article/26412.htm ------------------------------------------------------- nginx “nginx could not build the server_names_hash”解决方法 给一个服务器下增加了一些站点别名&#xff0c;差不多有20多个。 重启nginx时候&#…

java 使用fusioncharts_fusioncharts同一页面显示2个仪表盘,且以java字符串作为xml数据...

fusioncharts同一页面显示2个仪表盘&#xff0c;且以java字符串作为xml数据String path request.getContextPath();%>String xml "";%>FusionCharts - Multiple Charts on one Pagevar contextpath "";var xml ;body {font-family: Arial, Helve…

排名前16的Java工具类

原文&#xff1a;https://www.jianshu.com/p/9e937d178203 在Java中&#xff0c;工具类定义了一组公共方法&#xff0c;这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名&#xff0c;参考数据来源于Github上随机选取的5万个开源项目源码…

VS2012(Visual Studio 2012)官方免费中文旗舰版下载(含激活密钥)

原文路径&#xff1a;http://www.nocang.com/visual-studio-ultimate-2012/ vs2012旗舰版安装激活教程 1、下载到的是ISO格式文件&#xff0c;直接解压缩或用虚拟光驱加载运行&#xff1b;2、无所不藏推荐直接解压缩安装即可&#xff0c;双击“vs_ultimate.exe”进行安装&#…

magic square java_测试Magic Square Java的.txt文件

我不想问&#xff0c;但我无法弄清楚这个任务&#xff0c;当我寻求帮助时&#xff0c;助教也不会。我必须从文本文件中获取输入&#xff0c;将文件中的整数输入到数组列表中&#xff0c;然后测试它是否是anxn幻方。n等于数组列表长度的平方根。如果不是理想的正方形&#xff0c…

字符串拼串 能缓解我们的开发难度→!←(ε=(´ο`*)))唉,又是一个不知道该怎么写题目的随笔啊,头疼)...

简单描述&#xff1a;今天看我同事提交的代码&#xff0c;发现一个东西&#xff0c;让我有了一点小想法&#xff0c;是这样的&#xff0c;他利用一个‘’无关紧要‘’的标签属性&#xff0c;(哈哈哈&#xff0c;也不能说人家是无关紧要的属性了&#xff0c;暂时是无关紧要的属性…

SQL中使用DISTINCT显示多个字段的方法(不使用DISTINCT了)

原文连接&#xff1a; https://www.cnblogs.com/alanliu/archive/2008/02/25/1080626.html --------------------------------- 效果是DISTINCT CUS_NO,并且同时显示CUS_NAME.SELECTCUS_NO,MIN(CUS_NAME) ASCUS1 FROMdbo.CUS GROUPBYCUS_NO

java 注释快捷打出时间_Java快捷---自动注释时间作者。。。

在使用Eclipse 编写Java代码时&#xff0c;自动生成的注释信息都是按照预先设置好的格式生成的。修改作者、日期注释格式&#xff1a;打开Windows->Preferences->Java->Code Style->Code Templates&#xff0c;点击右边窗口中的Comments&#xff0c;可以看到有很多…

016 pickle

英文也是泡菜的意思。 学完了&#xff0c;还是感觉这个模块是蛮不错的&#xff0c;对多数据保存到文件中&#xff0c;然后在使用的时候&#xff0c;再读取出来&#xff0c;让程序闲的更加优雅&#xff0c;简洁。 一&#xff1a;介绍 1.为什么使用 在开篇已经介绍了&#xff0c;…

centos7与centos6区别

原文连接&#xff1a;https://www.cnblogs.com/bethal/p/5945026.html ---------------------------------------------------------------- CentOS 7 vs CentOS 6的不同 (1)桌面系统[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x&#xff08;GNOME Shell&#xff09;(2)文件系统[…

用java编写日历添加窗口一角_Java 实训4 编写一个窗体程序显示日历

实训要求&#xff1a;1.使用BorderLayout 进行总体布局2.在North 位置放置包含两个按钮( 上月和下月)的Panel3.在South 位置放置一个Label 用于显示当前年份和月份4.在Center 位置放置一个显示日历的Panel5.显示日历的Panel 设置7 行7 列的GridLayout 布局&#xff0c;其中第1行…

ER图转换成关系模式集的规则

转自己博客园文章 A与B1&#xff1a;1 在A表里把B表的主键和关系的属性加入到A表中 或B表里把A表的主键和关系的属性加入到B表中 举例 男人表身份证号姓名年龄女人身份证号登记日期女人表身份证号姓名年龄 A与B1:N 在A表中加入B表的主键与关系的属性 小米公司纳税号公司全称…

Grafana文档(在Centos / Redhat上安装)

在基于RPM的Linux上安装&#xff08;CentOS&#xff0c;Fedora&#xff0c;OpenSuse&#xff0c;RedHat&#xff09; 描述下载CentOS / Fedora / OpenSuse / Redhat Linux稳定版本x86-64CentOS / Fedora / OpenSuse / Redhat Linux稳定版本ARM64CentOS / Fedora / OpenSuse / R…

python3数字类型分为_Python初学3——数字类型及操作

一、数1.1 整数类型( 十、二、八、十六进制 )python中整数类型与数学中的整数概念一致&#xff0c;有正有负&#xff0c;取值任意。整数的表示形式&#xff1a;整数类型表示形式举例十进制34,163,210二进制0b1101 或 0B1101八进制0o357 或 0O357十六进制0x45ac 或 0X45ac1.2 浮…

idea 2018.1 创建springboot开启找回Run Dashboard

原文连接&#xff1a;https://www.cnblogs.com/yangtianle/p/8818255.html ---------------------------------------------------------------------------------配置方法首先找到项目中.idea文件下的workspace.xml开打接下来找到<component name"RunDashboard"&…