數據結構--最短路徑 Dijkstra算法

數據結構–最短路徑 Dijkstra算法

Dijkstra算法

計算? b e g i n 點到各個點的最短路 \color{red}計算\ begin\ 點到各個點的最短路 計算?begin?點到各個點的最短路

如果是無向圖,可以先把無向圖轉化成有向圖

我們需要2個數組
final[] (標記各頂點是否已找到最短路徑)與 dis[] (最短路徑?度)數組

Dijkstra算法是一種用于尋找圖中最短路徑的算法,它的步驟如下:

  1. 初始化:將起始節點的最短路徑設置為0,其他節點的最短路徑設置為正無窮大。
  2. 選取最短路徑最小的節點作為當前節點。
  3. 更新當前節點的鄰居節點的最短路徑:如果通過當前節點到達鄰居節點的路徑比鄰居節點當前的最短路徑更短,則更新鄰居節點的最短路徑。
  4. 標記當前節點為已訪問(已經找到 b e g i n begin begin 到該點的最短路)。
  5. 重復步驟2 → \to 4,直到所有節點都被訪問過或者沒有可達到的節點。
  6. 根據最短路徑和前驅節點構建最短路徑樹或者路徑數組。

以上就是Dijkstra算法的基本步驟。在實際應用中,可以使用優先隊列來選取最短路徑最小的節點,以提高算法的效率 (堆Dijkstra)。

V0到V2 的最短(帶權)路徑?度為:dist[2] = 9
通過 path[ ] 可知,V0到V2 的最短(帶權)路徑:
v 0 → v 4 → v 1 → v 2 v_0 \to v_4 \to v_1 \to v_2 v0?v4?v1?v2?

Dijkstra算法的時間復雜度

時間復雜度: O ( n 2 ) 即 O ( ∣ V ∣ 2 ) O(n^2)即O(|V|^2) O(n2)O(V2)

代碼實現

int g[N][N]; // 存儲每條邊
int dist[N]; // 存儲1號點到每個點的最短距離
bool st[N]; // 存儲每個點的最短路是否已經確定
//時間復雜是 O(n2+m), n 表示點數,m 表示邊數
// 求1號點到n號點的最短路,如果不存在則返回-1
int dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;for (int i = 0; i < n - 1; i++){int t = -1; // 在還未確定最短路的點中,尋找距離最?的點for (int j = 1; j <= n; j++)if (!st[j] && (t == -1 || dist[t] > dist[j]))t = j;// ?t更新其他點的距離for (int j = 1; j <= n; j++)dist[j] = min(dist[j], dist[t] + g[t][j]);st[t] = true;}if (dist[n] == 0x3f3f3f3f)return -1;return dist[n];
}

負權值帶權圖問題,Dijkstra不可用

負權值帶權圖問題, D i j k s t r a 不可用!!! \color{red}負權值帶權圖問題,Dijkstra不可用!!! 負權值帶權圖問題,Dijkstra不可用!!!

事實上 V 0 V_0 V0? V 2 V_2 V2? 的最短帶權路徑?度為 5
結論:Dijkstra 算法不適?于有負權值的帶權圖

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

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

相關文章

【ARM 嵌入式 編譯系列 10.1 -- GCC 編譯縮減可執行文件 elf 文件大小】

文章目錄 上篇文章&#xff1a;ARM 嵌入式 編譯系列 10 – GCC 編譯縮減可執行文件 elf 文件大小 接著上篇文章 ARM 嵌入式 編譯系列 10 – GCC 編譯縮減可執行文件 elf 文件大小 的介紹&#xff0c;我們看下如何進一步縮小可執行文件test的大小。上篇文章通過 strip --strip-…

RunnerGo的相比較JMeter優勢,能不能替代?

目前在性能測試領域市場jmeter占有率是非常高的&#xff0c;主要原因是相對比其他性能測試工具使用更簡單&#xff08;開源、易擴展&#xff09;&#xff0c;功能更強大&#xff08;滿足多種協議的接口&#xff09;&#xff0c;但是隨著研發協同的升級&#xff0c;平臺化的性能…

進程的概念和特征

進程的概念和特征 進程的概念進程的特征 進程的概念 在多道程序環境下&#xff0c;允許多個程序并發執行&#xff0c;此時他們將失去封閉性&#xff0c;并具有間斷性及不可再現性的特征。為此引入了進程&#xff08;process&#xff09;的概念&#xff0c;以便更好的描述和控制…

【Java】常用工具——異常

1. try-catch-finnaly try必須和catch或者finally組合使用&#xff1b; public class TryDemoOne {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.println("輸入第1個整數&#xff1a;");int one input.nextInt();S…

主流的嵌入式微處理器

目前主流的嵌入式微處理器系列有&#xff1a; ARM系列 MIPS系列 PowerPC系列 Super H系列 一、MPC/PPC系列 PowerPC(簡稱PPC),其基本設計源自IBM的POWER.1991年&#xff0c;APPLE(蘋果電腦)、IBM、Motorola&#xff08;摩托羅拉&#xff09;組成的AIM聯盟發展出Power微處理器…

mybatis-plus 根據指定字段 批量 刪除/修改

mybatis-plus 提供了根據id批量更新和修改的方法,這個大家都不陌生 但是當表沒有id的時候怎么辦 方案一: 手寫SQL方案二: 手動獲取SqlSessionTemplate 就是把mybatis plus 干的事自己干了方案三 : 重寫 executeBatch 方法結論: mybatis-plus 提供了根據id批量更新和修改的方法,…

Python jupyter lab 設置

在下載好jupyter lab 后&#xff0c;需要對其進行設置&#xff0c;尤其是遠程服務器的時候&#xff0c;因為根本就是沒有屏幕&#xff0c;也沒有瀏覽器。 新建設置文件 jupyter lab --generate-config設置文件內部參數 vim ~/.jupyter/jupyter_lab_config.py進去一通改&#…

網絡編程(8.15)io模型,IO多路復用(select,poll)

1.使用select函數實現IO多路復用 使用select函數實現IO多路復用的服務器&#xff1a; #include<stdio.h> #include<head.h> #include<netinet/in.h> #include<sys/select.h> #include<arpa/inet.h> #define PROT 1112 #define IP "192.16…

29 | 廣州美食店鋪數據分析

廣州美食店鋪數據分析 一、數據分析項目MVP加/價值主張宣言 隨著經濟的快速發展以及新媒體的興起,美食攻略、美食探店等一系列東西進入大眾的眼球,而人們也會在各大平臺中查找美食推薦,因此本項目做的美食店鋪數據分析也是帶有可行性的。首先通過對廣東省的各市美食店鋪數量…

對話即數據分析,網易數帆ChatBI做到了

大數據產業創新服務媒體 ——聚焦數據 改變商業 在當今數字化快速發展的時代&#xff0c;數據已經成為業務經營與管理決策的核心驅要素。無論是跨國大企業還是新興創業公司&#xff0c;正確、迅速地洞察數據已經變得至關重要。然而&#xff0c;傳統的BI工具往往對用戶有一定的…

初步認識OSI/TCP/IP一(第三十八課)

1 初始OSI模型 OSI參考模型(Open Systems Interconnection Reference Model)是一個由國際標準化組織(ISO)和國際電報電話咨詢委員會(CCITT)聯合制定的網絡通信協議規范,它將網絡通信分為七個不同的層次,每個層次負責不同的功能和任務。 2 網絡功能 數據通信、資源共享…

MTK Android非常用分辨率修改充電動畫

非標準分辨率的屏,配置MTK Android的關機充電動畫. 環境 芯片 MTK 系統 Android 服務器 ubuntu 屏幕分辨率356*400,不是常見的分辨率. 原始充電動畫顯示異常,畫面扭曲. 方法 確定使用的圖片 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo 這個目錄下…

springboot多模塊打包方式

明確子父模塊結構 父目錄是帶modules 大致結構如下&#xff1a; <modules><module>ruoyi-admin</module><module>ruoyi-framework</module><module>ruoyi-system</module><module>ruoyi-quartz</module><module>…

htmlCSS-----高級選擇器

目錄 前言 偽類選擇器 狀態類 結構類 偽元素選擇器 屬性選擇器 前言 前面我們學習了CSS中的相關選擇器&#xff08;鏈接html&CSS-----CSS選擇器&#xff08;上&#xff09;_灰勒塔德的博客-CSDN博客 html&CSS-----CSS選擇器&#xff08;下&#xff09;_灰勒塔…

計算機視覺中的Transformer

幾十年來&#xff0c;理論物理學家一直在努力提出一個宏大的統一理論。通過統一&#xff0c;指的是將被認為是完全不同的兩個或多個想法結合起來&#xff0c;將它們的不同方面證明為同一基礎現象。一個例子是在19世紀之前&#xff0c;電和磁被看作是無關的現象&#xff0c;但電…

基于java的汽車改裝方案網站設計與實現

摘要 本文主要講述了基于SpringBootMySql開發技術開發的汽車改裝方案網站的設計與實現。這里的汽車改裝方案網站是通過一個平臺使所有的汽車愛好者們可以不用出門就可以體驗到專業的汽車改裝方案設計服務。現實生活中如果需要進行汽車改裝的方案設計&#xff0c;往往要跑很多次…

【大數據之Kafka】三、Kafka生產者之消息發送流程及同步異步發送API

將外部傳送給過來的數據發送到kafka集群。 1 發送原理 &#xff08;1&#xff09;創建main()線程&#xff0c;創建producer對象&#xff0c;調用send方法&#xff0c;經過攔截器&#xff08;可選&#xff09;、序列化器、分區器。 &#xff08;2&#xff09;分區器將數據發送…

【Android Framework (十二) 】- 智能硬件設備開發

文章目錄 前言智能硬件的定義與應用智能硬件產品開發流程智能硬件開發所涉及的技術體系概述關于主板選型主板CPU芯片的選擇關于串口通信 總結 前言 針對我過往工作經歷&#xff0c;曾在一家智能科技任職Android開發工程師&#xff0c;簡單介紹下關于任職期間接觸和開發過的一些…

DDPM: Denoising Diffusion Probabilistic Models

DDPM: Denoising Diffusion Probabilistic Models 去噪擴散模型前向過程-加噪聲反向過程-去噪聲 去噪擴散模型 論文題目&#xff1a;Denoising Diffusion Probabilistic Models (DDPM) 論文來源&#xff1a;NIPS, 2020 論文地址&#xff1a;https://arxiv.org/abs/2006.11239 論…

RH850從0搭建Autosar開發環境【24】- Davinci Configurator之DEM模塊配置詳解(上)

DEM模塊配置詳解 - 上 一、Autosar中DEM模塊簡介1.DEM對其他模塊的依賴2.DEM模塊架構2.1 DEM模塊Dem Satellite(s) 和Master2.2 診斷事件處理2.2.1 基于計數器的算法2.2.2 基于時間的算法三、配置錯誤項處理3.1 容器DemEventParameter3.2 容器DemOperationCycleRef3.3 容器DemO…