代碼隨想錄算法訓練營day72 | 117. 軟件構建、47. 參加科學大會

本次題目來自于卡碼網

117. 軟件構建(拓撲排序)

python設置默認值

from collections import defaultdict
aa = defaultdict(int)

拓撲排序:找到入度為0的節點,然后移除。如果最后都能移除,則無環,可以排序。

import collections
if __name__ == '__main__':n, m = map(int, input().strip().split())inDegree = [0] * n  # 記錄每個文件的入度umap = collections.defaultdict(list)  # 記錄文件依賴關系result = []  # 記錄結果for _ in range(m):s, t = map(int, input().strip().split())inDegree[t] += 1  # t的入度加一umap[s].append(t)  # 記錄s指向哪些文件queue = collections.deque()for i in range(n):# 入度為0的文件,可以作為開頭,先加入隊列if inDegree[i] == 0:queue.append(i)while queue:cur = queue.popleft()  # 當前選中的文件result.append(cur)files = umap[cur]  # 獲取該文件指向的文件if files:  # cur有后續文件for i in range(len(files)):inDegree[files[i]] -= 1  # cur的指向的文件入度-1if inDegree[files[i]] == 0:queue.append(files[i])if len(result) == n:print(" ".join([str(i) for i in result]))else:print(-1)

47. 參加科學大會(dijkstra算法)

最短路是圖論中的經典問題即:給出一個有向圖,一個起點,一個終點,問起點到終點的最短路徑。

dijkstra算法:在有權圖(權值非負數)中求從起點到其他節點的最短路徑算法。

需要注意兩點:

  • dijkstra 算法可以同時求 起點到所有節點的最短路徑
  • 權值不能為負數

dijkstra算法和prim算法相似,都是分下面三步,但是變為了源點到節點的距離。

  1. 第一步,選源點到哪個節點近且該節點未被訪問過
  2. 第二步,該最近節點被標記訪問過
  3. 第三步,更新非訪問節點到源點的距離(即更新minDist數組)
if __name__ == '__main__':n, m = map(int, input().strip().split())grid = [[float('inf')] * (n + 1) for _ in range(n + 1)]for i in range(m):p1, p2, val = map(int, input().strip().split())grid[p1][p2] = valstart = 1end = n# 存儲從源點到每個節點的最短距離minDist = [float('inf')] * (n + 1)# 記錄頂點是否被訪問過visited = [False] * (n + 1)minDist[start] = 0  # 起始點到自身的距離為0for i in range(1, n + 1):  # 遍歷所有節點minVal = float('inf')cur = 1# 1、選距離源點最近且未訪問過的節點for v in range(1, n + 1):if not visited[v] and minDist[v] < minVal:minVal = minDist[v]cur = vvisited[cur] = True  # 2、標記該節點已被訪問# 3、第三步,更新非訪問節點到源點的距離(即更新minDist數組)for v in range(1, n + 1):if not visited[v] and grid[cur][v] != float('inf') and minDist[cur] + grid[cur][v] < minDist[v]:minDist[v] = minDist[cur] + grid[cur][v]if minDist[end] == float('inf'):print(-1)  # 不能到達終點else:print(minDist[end])  # 到達終點最短路徑

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

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

相關文章

C#發票識別接口,再長的稅號錄入都不怕

“十二金”工程是我國政府在信息化建設中的重要一步&#xff0c;“金稅工程”總稱為中國稅收管理信息系統&#xff08;CTAIS&#xff09;&#xff0c;是我國電子政務的核心系統之一,是財政的重要環節。十二金”是面向政府辦公業務建立的十二個重點信息應用系統&#xff0c;按“…

解決使用monaco-editor編譯器,編譯器展示內容沒有超過編譯器高度,但是出現滾動條問題

前言&#xff1a; 最近在完成項目時&#xff0c;有使用編譯器進行在線編輯的功能&#xff0c;就選用了monaco-editor編譯器&#xff0c;但是實現功能之后&#xff0c;發現即使在編譯器展示的內容沒有超過編譯器高度的情況下&#xff0c;編譯器依舊存在滾動條&#xff0c;會展示…

計算機網絡--網絡層

一、網絡層的服務和功能 網絡層主要為應用層提供端對端的數據傳輸服務 網絡層接受運輸層的報文段&#xff0c;添加自己的首部&#xff0c;形成網絡層分組。分組是網絡層的傳輸單元。網絡層分組在各個站點的網絡層之間傳輸&#xff0c;最終到達接收方的網絡層。接收方網絡層將運…

如何在 Java 應用中使用 Jedis 客戶端庫來實現 Redis 緩存的基本操作

本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(注明:作者:王文峰…

構建高效盲盒小程序:數據庫設計、安全策略與性能優化

在移動互聯網時代&#xff0c;盲盒經濟以其獨特的魅力迅速崛起&#xff0c;成為連接消費者與商品的新橋梁。盲盒小程序作為這一趨勢的載體&#xff0c;不僅要求用戶體驗流暢&#xff0c;還需確保數據安全與性能卓越。本文將從數據庫設計、安全策略及性能優化三個方面&#xff0…

堆與棧的概念(RTOS)

目錄 #堆在RTOS的概念 #相關代碼表示 #堆相關特點 #棧在RTOS中的概念 #棧的代碼表示 #棧的相關特點 #為什么每個RTOS任務都要有自己的棧 前言&#xff1a;本篇參考韋東山老師的RTOS&#xff0c;連接放在最后 #堆在RTOS的概念 本文所指的堆與棧并不是數據結構中&#xff…

【unity實戰】在Unity中使用有限狀態機制作一個敵人AI

最終效果 文章目錄 最終效果前言有限狀態機的主要作用和意義素材下載邏輯圖敵人動畫配置優雅的代碼文件目錄狀態機代碼定義敵人不同狀態切換創建敵人效果更多的敵人參考源碼完結 前言 有限狀態機以前的我嗤之以鼻&#xff0c;現在的我逐幀分析。其實之前我就了解過有限狀態機&…

2.(vue3.x+vite)調用iframe的方法(vue編碼)

1、效果預覽 2.編寫代碼 (1)主頁面 <template><div><button @click="sendMessage">調用iframe,并發送信息

【udp報文】udp報文未自動分片,報文過長被攔截問題定位

問題現象 某局點出現一個奇怪的現象&#xff0c;客戶端給服務端發送消息&#xff0c;服務端僅能收到小部分消息&#xff0c;大部分消息從客戶端發出后&#xff0c;服務端都未收到。 問題定位 初步分析 根據現象初步分析&#xff0c;有可能是網絡原因導致消息到服務端不可達&a…

【C語言】文件的順序讀寫

©作者:末央&#xff06; ©系列:C語言初階(適合小白入門) ©說明:以凡人之筆墨&#xff0c;書寫未來之大夢 目錄 前言字符輸入輸出函數 - fgetc和fputc文本行輸入輸出函數 - fgets和fputs格式化輸入輸出函數 - fscanf和fprintf 前言 對文件數據的讀寫可以分為順序…

Unity3D 打造基于AStar的尋路與導航詳解

在游戲開發中&#xff0c;尋路與導航是一個至關重要的功能&#xff0c;它能夠使游戲角色自動找到最優路徑&#xff0c;避開障礙物&#xff0c;實現自動導航&#xff0c;從而提升游戲體驗。AStar&#xff08;A*&#xff09;算法作為一種廣泛應用的尋路算法&#xff0c;因其高效性…

關于多線程的使用方法

多線程在python中應用比較廣泛&#xff0c;但是因為python中有GIL鎖的緣故&#xff0c;在多線程中看起來是并發的執行的&#xff0c;在宏觀上是并發執行的&#xff0c;但是在微觀上是一個接著一個執行。 在python中使用多線程比較簡單&#xff0c;是一套固定的模版。 from qu…

PHP利用GD庫實現圖片合成功能方法

在程序項目開發的過程中我們免不了要實現一種功能。例如海報的生成&#xff0c;照片和文字合成一張新的圖片。php中怎么實現 實現功能 文字和照片合成一張新的照片&#xff0c;并且自適應換行并加上簽名和日期&#xff0c;加上字體樣式&#xff0c;下面我們就開實現該功能 實現…

Seal^_^【送書活動第8期】——《ChatGLM3大模型本地化部署、應用開發與微調》

Seal^_^【送書活動第8期】——《ChatGLM3大模型本地化部署、應用開發與微調》 一、參與方式二、本期推薦圖書2.1 作者建語2.2 編輯推建2.3 圖書簡介2.4 前 言2.5 目 錄 三、正版購買 大模型領域 既是繁星點點的未知宇宙&#xff0c;也是蘊含無數可能的廣闊天地&#xff0c; 正…

深入理解 Linux 內核架構

目錄 引言內核概念Linux 內核的基本組成 進程管理內存管理文件系統設備驅動網絡棧內核結構 內核態與用戶態內核模塊系統調用中斷與異常處理內核同步機制Linux 內核使用場景常用的內核命令與工具內核調試與性能優化總結 1. 引言 Linux 內核是現代計算機系統的核心組件之一&am…

python--基礎知識點--協程

協程由用戶態控制&#xff0c;不由內核控制1個線程中可以開很多協程協程切換是在用戶態控制不由內核控制&#xff0c;切換時資源開銷小使用方式&#xff1a;async def、await可等待對象(協程對象、Future對象、task對象(是Future對象的子類)->io等待)、事件循環使用場景&…

idea創建自定義的maven spark scala archetype腳手架

一&#xff1a;先創建一個Maven項目net.alchim31.maven&#xff08;選該模板&#xff0c;得要等一會兒才能加載出來&#xff09; 之后將自己的目錄結構建立好&#xff0c;最好不要有空目錄&#xff0c;可能會因為沒有文件在install的時候編譯不進去 pom中內容也按照自己的需要改…

Stable Diffusion web UI 插件

2024.7.3更新&#xff0c;持續更新中 如果需要在linux上自己安裝sd&#xff0c;參考&#xff1a;stable diffusion linux安裝 插件復制到 /stable-diffusion-webui/extensions 目錄下&#xff0c;然后重新啟動sd即可 一、插件安裝方法 每種插件的安裝方法可能略有不同&#xf…

蘋果p12證書最簡單最新申請流程

使用uniapp打包&#xff0c;在ios上打正式包需要蘋果的p12證書和證書profile文件&#xff0c;點進去uniapp的ios證書申請教程&#xff0c;通篇就是使用mac電腦申請的教程&#xff0c;假如沒有mac電腦就無法繼續了。 因此&#xff0c;假如沒有mac電腦的同志們&#xff0c;可以參…

高薪程序員必修課-Java中為什么不建議使用Executors來創建線程池?

目錄 前言 原因分析 1. newFixedThreadPool 和 newSingleThreadExecutor 示例&#xff1a; 2. newCachedThreadPool 示例&#xff1a; 建議的替代方法 示例&#xff1a; 解釋&#xff1a; 總結 前言 在Java中&#xff0c;Executors 類提供了幾個工廠方法來創建不同類型…