圖的應用-最短路徑

最短路徑的典型用途:

交通網絡的問題——從甲地到乙地之間是否有公路連通?

在有多條通路的情況下,哪一條路最短?

交通網絡用有向網來表示:頂點——表示地點——表示兩個地點有路連通,弧上的權值——表示兩地點之間的距離、交通費或途中所花費的時間等。

如何能夠使一個地點到另一個地點的運輸時間最短或運費最省?這就是一個求兩個地點間的最短路徑問題。

問題抽象:

有向網中A點(源點)到達B點(終點)的多條路徑中,尋找一條各邊權值之和最小的路徑,即最短路徑

最短路徑與最小生成樹不同,路徑上不一定包含n個頂點,也不一定包含n - 1條邊

第一類問題是求兩點間的最短路徑:下圖是兩點間的距離,求最短路徑,比如是從V1到V7,我們將所有可能的路徑一一羅列并求權值之和,比較大小

第二類問題是求某源點到其他個點的最短路徑:此時源點是任取的,看你想要哪個作為起點

下圖中,比如由V0到V4的最短路徑,有兩條,一條是V0-V2-V3-V4=8+5+6=19,還有一條是V0直接到V4,權值是30,很明顯19更小,所有19填入表中,以此類推,不再贅述

兩種常見的最短路徑問題:

一、單源最短路徑:用Dijkstra(迪杰斯特拉)算法

二、所有頂點間的最短路徑:用Floyd(弗洛伊徳)算法

接下來我們來分析迪杰斯特拉算法

如下圖表,i=1所在的列,是指的V0到其他所有頂點的權值,如果沒有直達的邊(一條),記為∞

1.從VO到V1,權值為13,所以我們在V1所在行的第一個表格上填13,V0到V2權值為8,所以在V2所在行第一個表格填8,以此類推,V0到V4為30,V0到V6為32,其余填∞

2.找出填好的這一列(i=1所在的列)最小的權值,填到距離那行,也就是權值為8最小,對應的是V2,將V2填入Vj那一行,于是V2所在行劃去,因為我們已經找到到達V2的最小距離

3.接著,從V0和VO-V2出發,繼續尋找最短路徑,V0-V1依然不變是13,而V0-V2到V3,權值為8+5=13,除此之外無從V0/V2出發的路徑能到達V3,所以V3的值改為13,V4沒有V0-V2能直接到的邊(就是走一條邊就能到),所以依然是30不變,以此類推

4.我們發現,此時13是最小路徑,把第一個13(V1)放入距離和Vj中,劃去V1所在行,此后不再需要比較V1和V2的路徑

以此類推,不再贅述

弗洛依德 (Floyd) 算法思想:?

逐個頂點試探 ,從 Vi到 Vj 的所有可能存在的路徑中 ,選出一條長度最短的路徑

我們一 一分析一下這道題

從A->B,權值是4,A->C是11,以此類推,主對角線均為0(因為A到A,B到B,C到C均無邊)

加入A的意思是,比如從B到C,那加入A就是B-A-C的路徑,是6+11=17>2,所以BC不動

分析C到B,加入A就是CAB=3+4=7<∞,所以改為7

加入B,我們分析A到C,ABC=4+2=6<11,所以改為6

分析C到A,CBA,C沒有直接到B的,所以不必改

加入C,我們分析BA,B-C-A=2+3=5<6,所以改為5

總結:加入誰,誰所在的行先不變,對角線永遠是0

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

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

相關文章

【qt5_study】1.Hello world

模板 作為初學者我們選擇第一個Application(Qt)和 Qt Widgets Application,所謂的模板就是 Qt為了方便開發程序,在新建工程時可以讓用戶基于一種模板來編寫程序,包括 cpp文件, ui文件都已經快速的創建,而不用用戶手動創建這些文件。 基類 這里默認選擇的基類為 QMainWin…

項目構想|文生圖小程序

Date: August 4, 2025項目介紹 &#x1f44b;&#xff0c;我們通過 Vibe Coding 做一個文字生成圖片的小程序。 我們會從需求分析、技術選型、UI設計、項目構筑到最后打包&#xff0c;一路嘗試 Vibe Coding 實現。 創建項目 創建文件夾&#xff1a;ai-pic-mini-app 采用 Git 進…

TiDB/MongoDB/Taosdb存儲引擎概覽

數據庫類型存儲引擎數據結構源碼位置tidbRockDBLSM樹https://github.com/facebook/rocksdbmongodbWiredTigerB 樹/LSM樹https://github.com/wiredtiger/wiredtigerTDengineTSDBBRINhttps://github.com/taosdata/TDengine 1、tidb存儲引擎概覽 LSM樹數據結構描述LSM樹(Log Str…

qt窗口--01

文章目錄qt窗口--01窗口概覽菜單欄工具欄狀態欄浮動窗口子窗口對話框model結語很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&#xff0c;Li…

Neo4j 社區版 Mac 安裝教程

最近用到了nebulagraph圖數據庫做金融反欺詐項目&#xff0c;雖然nebula屬于分布式架構&#xff0c;但依然感覺nebula使用不太順手&#xff0c;這里順便研究一下neo4j這款數據庫如何&#xff0c;這里先從安裝開始&#xff1f; 一、 準備工作 確認 Java 版本要求&#xff1a; N…

Android Studio(2025.1.2)Gemini Agent 使用指南

Android Studio&#xff08;2025.1.2&#xff09;Gemini Agent 使用指南 文章目錄Android Studio&#xff08;2025.1.2&#xff09;Gemini Agent 使用指南1. 什么是 Gemini Agent&#xff1f;2. 如何啟用和配置 Gemini Agent2.1 獲取 API Key2.2 在 Android Studio 中配置3. 實…

計算機視覺--opencv(代碼詳細教程)

在計算機視覺的廣袤領域中&#xff0c;OpenCV 是一座極為關鍵的里程碑。無論是在前沿的學術研究&#xff0c;還是在蓬勃發展的工業界&#xff0c;OpenCV 憑借其強大的功能與高效的性能&#xff0c;為開發者提供了豐富的圖像處理和計算機視覺算法&#xff0c;助力無數項目落地。…

Centos6停止服務后yum改用阿里云

環境: OS:Centos 6.9 1.進入到yum配置目錄 cd /etc/yum.repos.d 2.備份 cp CentOS-Base.repo CentOS-Base.repo.bk 3.下載 wget -O CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo 問題1: 因為Centos-6早就停止了更新維護&#xff0c;阿里云鏡像網站將其倉庫…

putty+Xming(XLaunch) 遠程登錄VirtualBox中的Ubuntu24.04,顯示圖形化(GUI)界面

測試環境&#xff1a;VirtualBox 7,Ubuntu24.04 desktop,Ubuntu24.04 Server(no desktop)&#xff0c;均測試成功。 一、先測試putty遠程登錄VirtualBox中的Ubuntu&#xff0c;可以使用ssh、Telnet 等協議。參見拙文《ssh連接VirtualBox中的Ubuntu24.04&#xff08;win11、put…

SpringBoot微頭條實戰項目

一、項目概述 微頭條是一個基于現代技術棧構建的新聞發布和瀏覽平臺&#xff0c;旨在為用戶提供便捷的新聞閱讀體驗和高效的新聞管理功能。該項目通過前后端分離的架構設計&#xff0c;實現了用戶注冊、登錄、新聞瀏覽、搜索、發布、修改和刪除等功能&#xff0c;同時通過JWT技…

如何給電腦換個ip地址?電腦換ip幾種方法

更換電腦的IP地址的方法取決于你的具體需求和網絡環境&#xff08;是換本地局域網IP還是換對外公網IP&#xff09;。以下是幾種常見的方法&#xff1a; 一、更換本地局域網IP地址&#xff08;在同一個網絡內&#xff09; 這個IP地址通常由你的路由器&#xff08;或公司的網絡管…

Pytest項目_day04(Python做接口請求)

Requests包 在python中&#xff0c;可以使用requests包&#xff0c;用于做接口請求和接口測試request支持http和https簡單的get函數調用如下&#xff1a;r.jsonr.status_coder.textget函數的帶params用法post函數的帶params用法 post也可以和get一樣在url中傳入參數在requests包…

Flink與Kafka核心源碼詳解-目錄

Flink是Apache軟件基金會下開源的分布式流批一體計算框架&#xff0c;具備實時流計算和高吞吐批處理計算的大數據計算能力。本專欄內容為Flink源碼解析的記錄與分享。 本文解析的Flink源碼版本為&#xff1a;flink-1.19.0 以下為Flink-1.19.0-完整源碼詳解的目錄導航。 Flink-…

【VLLM篇】:原理-實現

1、VLLM vLLM是一個建立在【PagedAttention】之上的高吞吐的【分布式服務引擎】&#xff0c;目標是【提高吞吐量】、【提高內存利用率】&#xff08;kv-cache內存利用率高達96%&#xff09;&#xff0c;它的內存管理分配方式從【固定分配】改進為【分頁管理】&#xff0c;類似操…

什么是 TcpCommunicationSpi

&#x1f9e9; 一、核心定位&#xff1a;什么是 TcpCommunicationSpi&#xff1f; /*** <tt>TcpCommunicationSpi</tt> is default communication SPI which uses* TCP/IP protocol and Java NIO to communicate with other nodes.*/翻譯&#xff1a;TcpCommunicat…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 詞云圖-微博評論用戶詞云圖實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解詞云圖-微博評論用戶詞云圖實現 視頻在線地…

數據結構----棧和隊列認識

目錄 棧&#xff08;后進先出&#xff09; 棧的實現 頭文件 初始化 入棧 注意&#xff1a; bool 判空 出棧----棧頂 注意 出棧頂元素&#xff0c;元素不會刪除 注意&#xff1a; 獲取棧中有效個數 銷毀棧 源文件操作 用棧實現遞歸* 隊列&#xff08;先進先出&a…

【Kafka系列】第二篇| Kafka 的核心概念、架構設計、底層原理

在大數據和分布式系統飛速發展的今天&#xff0c;消息隊列作為高效的通信工具&#xff0c;在系統解耦、異步通信、流量削峰等方面作用顯著。 而 Kafka 這款高性能、高吞吐量的分布式消息隊列&#xff0c;在日志收集、數據傳輸、實時計算等場景中應用廣泛。 接下來&#xff0c;我…

Kafka-exporter采集參數調整方案

#作者&#xff1a;張桐瑞 文章目錄1 問題概述2 修改方案2.1修改參數2.2配置示例3 消費者組均分腳本3.1使用說明3.2腳本內容3.3實現原理說明4 KAFKA-EXPORTER流程代碼4.1KAFKA-EXPORTER拉取數據流程1 問題概述 由于kafka-exporter獲取kafka指標時間過長&#xff0c;無法通過cur…

AT32的freertos下modbus TCP移植

1.準備模板 打開雅特力官網&#xff0c;也就是帶有LwIP的示例。 下載官方源碼&#xff1a;modbus 2.移植 我這里是在這里新建兩個文件夾&#xff0c;分別是modbus與port&#xff0c;這個任意&#xff0c;只需要將必要的文件加入項目即可。 將源碼中的modbus這些都移植過來&a…