最短路徑:Bellman-Ford算法

Bellman-Ford的操作步驟

1.初始化距離:將起點的dist值設置為0,其他點的dist值設置為無窮大。

2.執行n-1輪松弛操作:遍歷所有邊,更新最短距離,收斂后可獲得最短路徑。

3.檢測負權環:額外遍歷一次,若還可以進行更新,則說明圖中存在負權環。

Bellman-Ford的代碼實現

#include<iostream>
#include<cstring>
using namespace std;
int n, m;
int dist[105];
int s;
struct edge {int a, b, w;
}e[10005];
void ford() {//可以判斷負邊權回路int x, y, w;int flag = 0;for (int i = 1; i <= n - 1; i++) {//循環到n flag為1 負權環回路flag = 0;for (int j = 0; j < m; j++) {x = e[j].a;y = e[j].b;w = e[j].w;if (dist[x] + w < dist[y]) {dist[y] = dist[x] + w;flag = 1;} }if (flag == 0) {break;}}
}
int main() {cin >> n >> m;for (int i = 0; i < m; i++) {cin >> e[i].a >> e[i].b >> e[i].w;}cin >> s;memset(dist, 0x3f, sizeof(dist));dist[s] = 0;//起點到自己距離為0ford();for (int i = 1; i <= n; i++) {cout << dist[i] << " ";}return 0;
}

Bellman-Ford算法的作用與分析

根據代碼可知,該算法的時間復雜度為O(n*m),它能用來判斷負權環的存在,同時也能處理負邊權。

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

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

相關文章

0402-對象和類(訪問器 更改器 日期類)

OOP&#xff1a;面向對象程序設計 類&#xff1a;構造對象的模板或藍圖 類構造對象的過程稱為創建類的實例 封裝&#xff1a;對外隱藏數據的真實實現方式&#xff0c;提供簡單的方法 &#xff08;類比方向盤&#xff09; 對象&#xff1a;本質上是內存中的一小塊空間 識別類&a…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的文件上傳與下載:實現文件管理功能

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開篇整…

搜索算法------DFS練習2

1. 題目 2. 思路和題解 從題目中可以看出&#xff0c;如果一個格子上有雨水&#xff0c;那么就可以流到周圍比他高度低的單元格&#xff0c;如果單元格和海洋相鄰&#xff0c;那么雨水也會流入海洋。總而言之一句話就是水從高處流向低處。從這里的流向可以聯想到深度優先搜索這…

[python] 正則表達式

1.分割str s"1-2--3---4" are.findall(r\d|[-],s) # 輸出&#xff1a;[1, -, 2, --, 3, ---, 4]s"-4(2(3)" # ? 表示 - 可以出現0次或1次 # \d 表示匹配一個或多個連續數字 # \D 表示匹配非數字字符 sre.findall(r-?\d|\D,s) # 輸出&#xff1a;[-4, (,…

定制化管理系統與通用管理系統,誰更勝一籌?

一、定制化管理系統與通用管理系統的定義與特點 定制化管理系統 定制化管理系統是根據企業的具體業務需求和流程進行個性化開發的軟件系統。它能夠深度貼合企業的管理需求&#xff0c;提供高度靈活的解決方案。其特點包括&#xff1a; 高度適應性&#xff1a;能夠精準匹配企業…

gitee 配置git上傳

Git入門&#xff1f;查看 幫助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何連接本站, 如何導入倉庫 簡易的命令行入門教程: Git 全局設置: 以 176fuguM2項目為例 git config --global user.name "墮落圣甲蟲" git config --global user.email "11…

SpringBoot+Vue 中 WebSocket 的使用

WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議&#xff0c;它使得客戶端和服務器之間可以進行實時數據傳輸&#xff0c;打破了傳統 HTTP 協議請求 - 響應模式的限制。 下面我會展示在 SpringBoot Vue 中&#xff0c;使用WebSocket進行前后端通信。 后端 1、引入 j…

STM32 FATFS - 在SDIO的SD卡中運行fatfs

參考文章 STM32CubeMX | SD Card FATFS - 知乎 [STM32F4]基于F407的硬件移植Free RTOSFATFS&#xff08;SDIO&#xff09;_freertosfatfs-CSDN博客 例程地址&#xff1a;STM32FatFS: 基于stm32的fatfs例程&#xff0c;配合博客文章 基于梁山派天空星開發板&#xff0c;STM3…

Java 進化之路:從 Java 8 到 Java 21 的重要新特性

Java 進化之路&#xff1a;從 Java 8 到 Java 21 的重要新特性 開篇介紹 在軟件開發領域&#xff0c;Java 作為一門歷史悠久且廣泛應用的編程語言&#xff0c;始終保持著其核心競爭力和持續創新能力。自 Java 8 發布以來&#xff0c;Java 經歷了一系列重要版本更新&#xff0…

Reactor 事件流 vs. Spring 事件 (ApplicationEvent)

Reactor 事件流 vs. Spring 事件 ApplicationEvent Reactor 事件流 vs. Spring 事件 (ApplicationEvent)1?? 核心區別2?? Spring 事件 (ApplicationEvent)? 示例&#xff1a;Spring 事件發布 & 監聽1?? 定義事件2?? 發布事件3?? 監聽事件&#x1f539; 進階&…

JVM生產環境問題定位與解決實戰(六):總結篇——問題定位思路與工具選擇策略

本文已收錄于《JVM生產環境問題定位與解決實戰》專欄&#xff0c;完整系列見文末目錄 引言 在前五篇文章中&#xff0c;我們深入探討了JVM生產環境問題定位與解決的實戰技巧&#xff0c;從基礎的jps、jmap、jstat、jstack、jcmd等工具&#xff0c;到JConsole、VisualVM、MAT的…

【5090d】配置運行和微調大模型所需基礎環境【一】

RuntimeError: Failed to import transformers.integrations.bitsandbytes because of the following error (look up to see its traceback): No module named triton.ops 原因&#xff1a;是因為在導入 transformers.integrations.bitsandbytes 時缺少必要的依賴項 triton.op…

華為交換綜合實驗——VRRP、MSTP、Eth-trunk、NAT、DHCP等技術應用

一、實驗拓撲 二、實驗需求 1,內網Ip地址使用172.16.0.0/16分配 2,sw1和SW2之間互為備份 3, VRRP/STP/VLAN/Eth-trunk均使用 4,所有Pc均通過DHCP獲取IP地址 5,ISP只能配置IP地址 6,所有電腦可以正常訪問IsP路由器環回 三、需求分析 1、設備連接需求 二層交換機&#xff08;LS…

DeepSeek 開源的 3FS 如何?

DeepSeek 3FS&#xff08;Fire-Flyer File System&#xff09;是一款由深度求索&#xff08;DeepSeek&#xff09;于2025年2月28日開源的高性能并行文件系統&#xff0c;專為人工智能訓練和推理任務設計。以下從多個維度詳細解析其核心特性、技術架構、應用場景及行業影響&…

Qt實現HTTP GET/POST/PUT/DELETE請求

引言 在現代應用程序開發中&#xff0c;HTTP請求是與服務器交互的核心方式。Qt作為跨平臺的C框架&#xff0c;提供了強大的網絡模塊&#xff08;QNetworkAccessManager&#xff09;&#xff0c;支持GET、POST、PUT、DELETE等HTTP方法。本文將手把手教你如何用Qt實現這些請求&a…

echarts+HTML 繪制3d地圖,加載散點+散點點擊事件

首先&#xff0c;確保了解如何本地引入ECharts庫。 html 文件中引入本地 echarts.min.js 和 echarts-gl.min.js。 可以通過官網下載或npm安裝&#xff0c;但這里直接下載JS文件更簡單。需要引入 echarts.js 和 echarts-gl.js&#xff0c;因為3D地圖需要GL模塊。 接下來是HTM…

深度剖析 MySQL 與 Redis 緩存一致性:理論、方案與實戰

在當今的互聯網應用開發中&#xff0c;MySQL 作為可靠的關系型數據庫&#xff0c;與 Redis 這一高性能的緩存系統常常協同工作。然而&#xff0c;如何確保它們之間的數據一致性&#xff0c;成為了開發者們面臨的重要挑戰。本文將深入探討 MySQL 與 Redis 緩存一致性的相關問題&…

DAO 類的職責與設計原則

1. DAO 的核心職責 DAO&#xff08;Data Access Object&#xff0c;數據訪問對象&#xff09;的主要職責是封裝對數據的訪問邏輯&#xff0c;但它與純粹的數據實體類&#xff08;如 DTO、POJO&#xff09;不同&#xff0c;也與 Service 業務邏輯層不同。 DAO 應該做什么&…

【Kubernetes】如何使用 kubeadm 搭建 Kubernetes 集群?還有哪些部署工具?

使用 kubeadm 搭建 Kubernetes 集群是一個比較常見的方式。kubeadm 是 Kubernetes 提供的一個命令行工具&#xff0c;它可以簡化 Kubernetes 集群的初始化和管理。下面是使用 kubeadm 搭建 Kubernetes 集群的基本步驟&#xff1a; 1. 準備工作 確保你的環境中有兩臺或更多的機…

Pycharm(十二)列表練習題

一、門和鑰匙 小X在一片大陸上探險&#xff0c;有一天他發現了一個洞穴&#xff0c;洞穴里面有n道門&#xff0c; 打開每道門都需要對應的鑰匙&#xff0c;編號為i的鑰匙能用于打開第i道門&#xff0c; 而且只有在打開了第i(i>1)道門之后&#xff0c;才能打開第i1道門&#…