兩點間最短路 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.pswp.cn/news/537955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537955.shtml
英文地址,請注明出處:http://en.pswp.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"&…