代碼隨想錄算法訓練營第六十四天| 圖論9—卡碼網47. 參加科學大會,94. 城市間貨物運輸 I

每日被新算法方式轟炸的一天,今天是dijkstra(堆優化版)以及Bellman_ford ,嘗試理解中,屬于是只能照著代碼大概說一下在干嘛。

47. 參加科學大會

https://kamacoder.com/problempage.php?pid=1047

dijkstra(堆優化版),主要區別用gpt總結了一下

  1. 第一步,選源點到哪個節點近且該節點未被訪問過
  2. 第二步,該最近節點被標記訪問過
  3. 第三步,更新非訪問節點到源點的距離(即更新minDist數組)

其中核心部分主要是最小堆來從當前所有候選路徑中找出距離起點最近的節點,更新它所連接的其他節點的最短路徑值。從堆里取出當前距離起點最近的節點,并嘗試用它來更新所有鄰接點的距離,直到終點被訪問或堆為空。也就是中間while函數的意義,其余代碼主要是構建堆以及處理輸入。

import heapqclass Edge:def __init__(self, to, val):self.to = toself.val = valdef dijkstra(n, m, edges, start, end):grid = [[] for _ in range(n + 1)]for p1, p2, val in edges:grid[p1].append(Edge(p2, val))minDist = [float('inf')] * (n + 1)visited = [False] * (n + 1)pq = []heapq.heappush(pq, (0, start))minDist[start] = 0while pq:cur_dist, cur_node = heapq.heappop(pq)if visited[cur_node]:continuevisited[cur_node] = Truefor edge in grid[cur_node]:if not visited[edge.to] and cur_dist + edge.val < minDist[edge.to]:minDist[edge.to] = cur_dist + edge.valheapq.heappush(pq, (minDist[edge.to], edge.to))return -1 if minDist[end] == float('inf') else minDist[end]# 輸入
n, m = map(int, input().split())
edges = [tuple(map(int, input().split())) for _ in range(m)]
start = 1  # 起點
end = n    # 終點# 運行算法并輸出結果
result = dijkstra(n, m, edges, start, end)
print(result)

94. 城市間貨物運輸 I

https://kamacoder.com/problempage.php?pid=1152

最主要區別在于Bellman_ford能解決負數的權重的問題,而dijkstra不行,

Bellman_ford算法的核心思想是 對所有邊進行松弛n-1次操作(n為節點數量),從而求得目標最短路。

然后是該算法的核心思想:松弛操作

  • 外層循環最多執行 n-1 次(這是 Bellman-Ford 的核心步驟)

  • 每次遍歷所有邊,嘗試更新目標點的最短距離(即“松弛”操作)

  • 如果一輪下來沒有任何更新,說明最短路徑已穩定,提前退出循環(優化)

def main():n, m = map(int, input().strip().split())edges = []for _ in range(m):src, dest, weight = map(int, input().strip().split())edges.append([src, dest, weight])minDist = [float("inf")] * (n + 1)minDist[1] = 0  # 起點處距離為0for i in range(1, n):updated = Falsefor src, dest, weight in edges:if minDist[src] != float("inf") and minDist[src] + weight < minDist[dest]:minDist[dest] = minDist[src] + weightupdated = Trueif not updated:  # 若邊不再更新,即停止回圈breakif minDist[-1] == float("inf"):  # 返還終點權重return "unconnected"return minDist[-1]if __name__ == "__main__":print(main())

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

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

相關文章

upload-labs通關筆記-第8關 文件上傳之點繞過

目錄 一、點繞過原理 二、deldot()函數 三、源碼分析 四、滲透實戰 1、構建腳本test8.php 2、打開靶場 3、bp開啟攔截 4、點擊上傳 5、bp攔截 6、后綴名增加點 7、發包并獲取腳本地址 8、訪問腳本 本文通過《upload-labs靶場通關筆記系列》來進行upload-labs靶場的滲…

Spring Web MVC————入門(3)

今天我們來一個大練習&#xff0c;我們要實現一個登錄界面&#xff0c;登錄進去了先獲取到登錄人信息&#xff0c;可以選擇計算器和留言板兩個功能&#xff0c;另外我們是學后端的&#xff0c;對于前端我們會些基礎的就行了&#xff0c;知道ajax怎么用&#xff0c;知道怎么關聯…

PhpStudy | PhpStudy 工具安裝 —— Windows 系統安裝 PhpStudy

&#x1f31f;想了解這個工具的其它相關筆記&#xff1f;看看這個&#xff1a;[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 筆者備注&#xff1a;Windows 中安裝 PhpStudy 屬于傻瓜式安裝&#xff0c;本文只是為了體系完善而發。 在前面的章節中&#xff0c;筆者簡…

K230 ISP:一種新的白平衡標定方法

第一次遇見需要利用光譜響應曲線進行白平衡標定的方法。很好奇是如何利用光譜響應曲線進行白平衡標定的。 參考資料參考&#xff1a;K230 ISP圖像調優指南 K230 介紹 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核異構單元加速計算架構&a…

通俗解釋Transformer在處理序列問題高效的原因(個人理解)

Transformer出現的背景 CNN 的全局關聯缺陷卷積神經網絡&#xff08;CNN&#xff09;通過多層堆疊擴大感受野&#xff0c;但在自然語言處理中存在本質局限&#xff1a; 局部操作的語義割裂&#xff1a;每個卷積核僅處理固定窗口&#xff08;如 3-5 詞&#xff09;&#xff0c;…

Java 多線程基礎:Thread 類核心用法詳解

一、線程創建 1. 繼承 Thread 類&#xff08;傳統寫法&#xff09; class MyThread extends Thread { Override public void run() { System.out.println("線程執行"); } } // 使用示例 MyThread t new MyThread(); t.start(); 缺點&#xff1a;Java 單…

Django 中時區的理解

背景 設置時區為北京時間 TIME_ZONE ‘Asia/Shanghai’ # 啟用時區支持 USE_TZ True 這樣設置的作用 前端 &#xff08;實際上前端el-date-picker 顯示的是當地時區的時間&#xff09; Element組件轉換后&#xff0c;我們是東八區&#xff0c;前端傳給后端的時間為&…

C# 深入理解類(成員常量)

成員常量 成員常量類似前一章所述的局部常量&#xff0c;只是它們被聲明在類聲明中而不是方法內&#xff0c;如下面的 示例&#xff1a; 與局部常量類似&#xff0c;用于初始化成員肯量的值在編譯時必須是可計算的&#xff0c;而且通常是一個預定 義簡單類型或由它們組成的表達…

【深度學習】#12 計算機視覺

主要參考學習資料&#xff1a; 《動手學深度學習》阿斯頓張 等 著 【動手學深度學習 PyTorch版】嗶哩嗶哩跟李沐學AI 目錄 目標檢測錨框交并比&#xff08;IoU&#xff09;錨框標注真實邊界框分配偏移量計算損失函數 非極大值抑制預測 多尺度目標檢測單發多框檢測&#xff08;S…

MCP實戰:在扣子空間用扣子工作流MCP,一句話生成兒童故事rap視頻

扣子最近迎來重要更新&#xff0c;支持將扣子工作流一鍵發布成MCP&#xff0c;在扣子空間里使用。 這個功能非常有用&#xff0c;因為我有很多業務工作流是在扣子平臺上做的&#xff0c;兩者打通之后&#xff0c;就可以在扣子空間里直接通過對話方式調用扣子工作流了&#xff0…

Redis學習打卡-Day3-分布式ID生成策略、分布式鎖

分布式 ID 當單機 MySQL 已經無法支撐系統的數據量時&#xff0c;就需要進行分庫分表&#xff08;推薦 Sharding-JDBC&#xff09;。在分庫之后&#xff0c; 數據遍布在不同服務器上的數據庫&#xff0c;數據庫的自增主鍵已經沒辦法滿足生成的主鍵全局唯一了。這個時候就需要生…

LabVIEW光譜信號仿真與數據處理

在光譜分析領域&#xff0c;LabVIEW 憑借其圖形化編程、豐富函數庫及強大數據處理能力&#xff0c;成為高效工具。本案例將介紹如何利用 LabVIEW 仿真光譜信號&#xff0c;并對實際采集的光譜數據進行處理&#xff0c;涵蓋信號生成、數據采集、濾波、分析及顯示等環節。 ? 一…

nginx相關面試題30道

一、基礎概念與核心特性 1. 什么是 Nginx&#xff1f;它的主要用途有哪些&#xff1f; 答案&#xff1a; Nginx 是一款高性能的開源 Web 服務器、反向代理服務器及負載均衡器&#xff0c;基于事件驅動的異步非阻塞架構&#xff0c;擅長處理高并發場景。 主要用途&#xff1a;…

數據庫實驗報告 數據定義操作 3

實驗報告&#xff08;第3次&#xff09; 實驗名稱 數據定義操作 實驗時間 10月12日1-2節 一、實驗內容 1、本次實驗是用sql語句創建庫和表&#xff0c;語句是固定的&#xff0c;要求熟記這些sql語句。 二、源程序及主…

霍夫圓變換全面解析(OpenCV)

文章目錄 一、霍夫圓變換基礎1.1 霍夫圓變換概述1.2 圓的數學表達與參數化 二、霍夫圓變換算法實現2.1 標準霍夫圓變換算法流程2.2 參數空間的表示與優化 三、關鍵參數解析3.1 OpenCV中的HoughCircles參數3.2 參數調優策略 四、Python與OpenCV實現參考4.1 基本實現代碼4.2 改進…

記錄一次修改nacos安全問題導致服務調用出現404

1、nacos默認值修改 nacos.core.auth.plugin.nacos.token.secret.key**** nacos.core.auth.server.identity.key******** nacos.core.auth.server.identity.value************ 重啟nacos, 這時候微服務的token認證會立即失效&#xff0c;等待自動重連認證或者手動重啟服務 2、…

Python面試總結

hello&#xff0c;大家好&#xff0c;我是potato&#xff0c;我總結一下最近的面試遇到的問題~ 1.Python開發&#xff08;軟通動力&#xff09; 自我介紹主要問了項目(YOLOv11)項目遇到的難點和解決方法is&#xff0c;列表和元組的區別Python多線程有什么問題&#xff1f;Pyt…

5.18 day24

知識點回顧&#xff1a; 元組可迭代對象os模塊 作業&#xff1a;對自己電腦的不同文件夾利用今天學到的知識操作下&#xff0c;理解下os路徑。 元組 元組的特點&#xff1a; 有序&#xff0c;可以重復&#xff0c;這一點和列表一樣 元組中的元素不能修改&#xff0c;這一點…

Uniapp中小程序調用騰訊地圖(獲取定位地址)

1、先配置權限&#xff1a; 這是上圖的代碼&#xff1a; "permission": { "scope.userLocation": { "desc": "你的位置信息將用于小程序位置接口的效果展示" } } 第二步&#xff1a;寫代碼&#xff1a; //下面是uniapp的模版代碼 主…

寫spark程序數據計算( 數據庫的計算,求和,匯總之類的)連接mysql數據庫,寫入計算結果

1. 添加依賴 在項目的 pom.xml&#xff08;Maven&#xff09;中添加以下依賴&#xff1a; xml <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.3.0…