Day60 圖論part10

今天大家會感受到 Bellman_ford 算法系列在不同場景下的應用。

建議依然是:一刷的時候,能理解 原理,知道Bellman_ford 解決不同場景的問題 ,照著代碼隨想錄能抄下來代碼就好,就算達標。 二刷的時候自己嘗試獨立去寫,三刷的時候 才能有一定深度理解各個最短路算法。

Bellman_ford 隊列優化算法(又名SPFA)

代碼隨想錄

import java.util.*;public class Main{public static void main (String[] args) {//對所有的邊松弛n-1次Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();List<List<Edge>> graph = new ArrayList<>(n+1);for(int i = 0; i <= n; i++){graph.add(new ArrayList<>());}for(int i = 0; i < m; i++){int start = scanner.nextInt();int end = scanner.nextInt();int val = scanner.nextInt();graph.get(start).add(new Edge(start, end, val));}int[] minDist = new int[n+1];Arrays.fill(minDist, Integer.MAX_VALUE);minDist[1] = 0;Deque<Integer> queue = new ArrayDeque<>();boolean[] isVisited = new boolean[n+1];queue.add(1);isVisited[1] = true;while(!queue.isEmpty()){int start = queue.remove();//取出隊列的時候,要取消標記,這樣保證有其他路徑對該節點進行更新,我們只要保證節點不被重復加入隊列即可isVisited[start] = false;for(Edge edge : graph.get(start)){if(minDist[start] + edge.val < minDist[edge.end]){minDist[edge.end] = minDist[start] + edge.val;if(!isVisited[edge.end]){queue.add(edge.end);isVisited[edge.end] = true;}} }}if(minDist[n] == Integer.MAX_VALUE){System.out.println("unconnected");}else{System.out.println(minDist[n]);}}
}class Edge{int start;int end;int val;public Edge(int start, int end, int val){this.start = start;this.end = end;this.val = val;}
}

總結

1.普通的Bellman_ford算法其實是每次都對所有的邊都進行一次松弛,但其實但真正有效的松弛,是基于已經計算過的節點在做的松弛。所以我們每次松弛只需要基于上一次松弛更新過的節點,以該節點作為出發節點對連接的邊就行。那我們就可以使用隊列來記錄上一次松弛更新過的節點,把這些節點依次加入到隊列里面,然后又取出來處理。

2.隊列里面存儲的是每條邊的起點,我們需要根據這些起點,找到邊,所以這樣傳統的鄰接表來存儲圖是最好的List<List<Edge>> graph = new ArrayList<>(n+1);

3.然后在while循環里面,還有一些地方和之前的處理不一樣,我們需要使用isVisited[]數組來判斷節點是否在隊列里面&#x

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64630.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64630.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在Linux上獲取MS(如Media Server)中的RTP流并錄制為雙軌PCM格式的WAV文件

在Linux上獲取MS(如Media Server)中的RTP流并錄制為雙軌PCM格式的WAV文件 一、RTP流與WAV文件格式二、實現步驟三、偽代碼示例四、C語言示例代碼五、關鍵點說明六、總結在Linux操作系統上,從媒體服務器(如Media Server,簡稱MS)獲取RTP(Real-time Transport Protocol)流…

Vue3 簡介

Vue3 簡介 最新版本&#xff1a; v3.5.13 1、性能提升 打包大小減少 41% - 初次渲染快 55%, 更新渲染快 133%內存減少 54% 2、源碼的升級 使用 Proxy 代替 defineProperty 實現響應式。重寫虛擬 DOM 的實現和 Tree-Shaking 3、擁抱TypeScript Vue3 可以更好的支持 TypeSc…

打造RAG系統:四大向量數據庫Milvus、Faiss、Elasticsearch、Chroma 全面對比與選型指南

在當今信息爆炸的時代&#xff0c;檢索增強生成&#xff08;Retrieval-Augmented Generation&#xff0c;簡稱RAG&#xff09;系統已成為自然語言處理&#xff08;NLP&#xff09;領域的重要工具。RAG 系統通過結合生成模型和信息檢索技術&#xff0c;能夠在大規模數據中高效地…

檢索增強生成(RAG):大語言模型的創新應用

近年來,隨著自然語言處理(NLP)技術的不斷發展,大型語言模型(Large Language Models, LLMs)在文本生成、對話系統等任務中展現出卓越的性能。然而,由于模型參數和訓練數據的靜態性,它們難以生成包含實時或領域特定信息的高質量文本。為解決這一局限性,檢索增強生成(Re…

Oracle Dataguard(主庫為 Oracle 11g 單節點)配置詳解(1):Oracle Dataguard 概述

Oracle Dataguard&#xff08;主庫為 Oracle 11g 單節點&#xff09;配置詳解&#xff08;1&#xff09;&#xff1a;Oracle Dataguard 概述 目錄 Oracle Dataguard&#xff08;主庫為 Oracle 11g 單節點&#xff09;配置詳解&#xff08;1&#xff09;&#xff1a;Oracle Data…

北京某新能源汽車生產及辦公網絡綜合監控項目

北京某新能源汽車是某世界500強汽車集團旗下的新能源公司&#xff0c;也是國內首個獲得新能源汽車生產資質、首家進行混合所有制改造、首批踐行國有控股企業員工持股的新能源汽車企業&#xff0c;其主營業務包括純電動乘用車研發設計、生產制造與銷售服務。 項目現狀 在企業全…

大數據系列之:深入理解學習使用騰訊COS和COS Ranger權限體系解決方案,從hdfs同步數據到cos

大數據系列之&#xff1a;深入理解學習使用騰訊COS和COS Ranger權限體系解決方案&#xff0c;從hdfs同步數據到cos 對象存儲COS對象存儲基本概念COS Ranger權限體系解決方案部署組件COS Ranger Plugin部署COS-Ranger-Service部署COS Ranger Client部署 COSN 從hdfs同步數據到co…

JAVA學習筆記_Redis進階

文章目錄 初識redisredis簡介windows啟動redis服務器linux啟動redis服務器圖形用戶界面客戶端RDM redis命令常用數據類型特殊類型字符串操作命令Key的層級格式哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 java客戶端Jedisjedis連接池SpringDataRedis序列化手…

1月第一講:WxPython跨平臺開發框架之前后端結合實現附件信息的上傳及管理

1、功能描述和界面 前端&#xff08;wxPython GUI&#xff09;&#xff1a; 提供文件選擇、顯示文件列表的界面。支持上傳、刪除和下載附件。展示上傳狀態和附件信息&#xff08;如文件名、大小、上傳時間&#xff09;。后端&#xff08;REST API 服務&#xff09;&#xff1a…

面試經典150題——滑動窗口

文章目錄 1、長度最小的子數組1.1 題目鏈接1.2 題目描述1.3 解題代碼1.4 解題思路 2、無重復字符的最長子串2.1 題目鏈接2.2 題目描述2.3 解題代碼2.4 解題思路 3、串聯所有單詞的子串3.1 題目鏈接3.2 題目描述3.3 解題代碼3.4 解題思路 4、最小覆蓋子串4.1 題目鏈接4.2 題目描…

12.29~12.31[net][review]need to recite[part 2]

網絡層 IP 首部的前一部分是固定長度&#xff0c;共 20 字節&#xff0c;是所有 IP 數據報必須具有的 路由器 路由選擇協議屬于網絡層控制層面的內容 l 路由器 的 主要工作&#xff1a; 轉發分組。 l 路由 信息協議 RIP (Routing Information Protocol ) 是 一種 分布式的…

免費下載 | 2024網絡安全產業發展核心洞察與趨勢預測

《2024網絡安全產業發展核心洞察與趨勢預測》報告的核心內容概要&#xff1a; 網絡安全產業概況&#xff1a; 2023年中國網絡安全產業市場規模約992億元&#xff0c;同比增長7%。 預計2024年市場規模將增長至1091億元&#xff0c;2025年達到1244億元。 網絡安全企業數量超過4…

Django項目部署到服務器

文章目錄 django項目部署到服務器在服務器上安裝Django和依賴&#xff1a;項目代碼上傳配置數據庫收集靜態文件配置Web服務器配置Gunicorn&#xff08;WSGI服務器&#xff09;啟動/停止/重載systemd服務。 django項目部署到服務器 在服務器上安裝Django和依賴&#xff1a; su…

記憶旅游系統|Java|SSM|VUE| 前后端分離

【技術棧】 1??&#xff1a;架構: B/S、MVC 2??&#xff1a;系統環境&#xff1a;Windowsh/Mac 3??&#xff1a;開發環境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4??&#xff1a;技術棧&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5??數據庫可…

微信小程序:定義頁面標題,動態設置頁面標題,json

1、常規設置頁面標題 正常微信小程序中&#xff0c;設置頁面標題再json頁面中進行設置&#xff0c;例如 {"usingComponents": {},"navigationBarTitleText": "標題","navigationBarBackgroundColor": "#78b7f7","navi…

基于通用優化軟件GAMS的數學建模和優化分析;GAMS安裝和介紹、GAMS程序編寫、GAMS程序調試、實際應用算例演示與經驗分享

GAMS&#xff08;General Algebraic Modeling System&#xff09;是一款高級建模系統&#xff0c;主要用于解決線性規劃、非線性規劃、動態規劃、混合整數規劃等優化問題。它以其簡單清晰的用戶接口和強健穩定的數值分析能力而著稱&#xff0c;適用于大型、復雜的優化問題。GAM…

理解生成協同促進?華為諾亞提出ILLUME,15M數據實現多模態理解生成一體化

多模態理解與生成一體化模型&#xff0c;致力于將視覺理解與生成能力融入同一框架&#xff0c;不僅推動了任務協同與泛化能力的突破&#xff0c;更重要的是&#xff0c;它代表著對類人智能&#xff08;AGI&#xff09;的一種深層探索。通過在單一模型中統一理解與生成&#xff…

學習vue3的筆記

一、vue和react的對比 1、基礎介紹 vue&#xff1a;https://cn.vuejs.org/ vue3是2020年創建的 react&#xff1a;https://react.dev/ react是一個2013年開源的JavaScript庫&#xff0c;嚴格意義上來說不是一個框架 2、diff算法 兩個框架采用的都是同級對比策略 兩節點對…

SQLiteDataBase數據庫

XML界面設計 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_paren…

k8s部署nginx+sshd實現文件上傳下載

要通過 nginx 和 sshd 實現文件的上傳和下載&#xff0c;通常的做法是結合 SSH 協議和 HTTP 協議&#xff0c;使用 nginx 提供 Web 服務器功能&#xff0c;同時使用 sshd&#xff08;即 SSH 服務&#xff09;來處理通過 SSH 協議進行的文件傳輸。 SSH 實現文件的上傳和下載&…