算法01-最小生成樹prim算法

最小生成樹prim算法
題源:代碼隨想錄卡哥的題
鏈接:https://kamacoder.com/problempage.php?pid=1053
時間:2025-04-18
難度:4?
題目:

1. 題目描述:

在世界的某個區域,有一些分散的神秘島嶼,每個島嶼上都有一種珍稀的資源或者寶藏。國王打算在這些島嶼上建公路,方便運輸。

不同島嶼之間,路途距離不同,國王希望你可以規劃建公路的方案,如何可以以最短的總公路距離將所有島嶼聯通起來。

給定一張地圖,其中包括了所有的島嶼,以及它們之間的距離。以最小化公路建設長度,確保可以鏈接到所有島嶼。

輸入描述:

第一行包含兩個整數V和E,V代表頂點數,E代表邊數。頂點編號是從1到V。例如:V=2,一個有兩個頂點,分別是1和2。

接下來共有E行,每行三個整數v1,v2和val,v1和v2為邊的起點和終點,val代表邊的權值。

輸出描述:

輸出聯通所有島嶼的最小路徑總距離

輸入示例:

7 11
1 2 1
1 3 1
1 5 2
2 6 1
2 4 2
2 3 2
3 4 1
4 5 1
5 6 2
5 7 1
6 7 1

輸出示例:

6

2. 解題方法:

采用prim算法來求最小生成樹的問題,使用貪心的思想,即在循環每一個頂點的過程中,尋找與當前生成樹距離最近的頂點,然后將其加入進來,然后更新當前生成樹到剩余頂點的最近距離。總共分為3個步驟:

  1. 尋找初始起點(這里隨機即可,選擇第1個)
  2. 然后判斷剩余節點中與當前生成樹距離最近的頂點,將其加入生成樹;
  3. 更新第2步新增節點到最小生成樹后,當前其他節點到最小生成樹的距離。

3. 代碼如下:

import java.util.*;

public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);

    int v=scanner.nextInt();int e=scanner.nextInt();int[][] grid=new int[v+1][v+1];for(int i=0;i<=v;i++){Arrays.fill(grid[i],10001);}for(int i=0;i<e;i++){int a=scanner.nextInt();int b=scanner.nextInt();int c=scanner.nextInt();grid[a][b]=c;grid[b][a]=c;}int[] minDist=new int[v+1];Arrays.fill(minDist,10001);boolean[] inTree=new boolean[v+1];for(int i=1;i<v;i++){int cur=-1;int minVal=Integer.MAX_VALUE;for(int j=1;j<=v;j++){if(!inTree[j]&&minDist[j]<minVal){minVal=minDist[j];cur=j;}}inTree[cur]=true;for(int j=1;j<=v;j++){if(!inTree[j]&&grid[cur][j]<minDist[j]){minDist[j]=grid[cur][j];}}}int res=0;for(int i=2;i<=v;i++){res+=minDist[i];}System.out.println(res);}

}

4. 心得體會

算法真的好難呀,555~
有沒有路過的大佬分享一下怎么學算法呀~

5. 碎碎念

東b管院本科生->東b計科水碩-> 一名熱愛技術但菜菜的女生,持續前進中~
如果有技術上的問題分享,或者生活中的碎碎念,愿意多一個互聯網搭子的話: dd19898852196(weiChat)

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

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

相關文章

cpolar 內網穿透 實現公網可以訪問本機

1、登錄網站&#xff0c;升級成專業版&#xff0c;測試的話建議選一個月付費&#xff0c;選擇預留 2、保留的TCP地址增加一條記錄&#xff0c;描述可以自己取 3、驗證&#xff0c;生成一個Authtocken碼 4、在安裝目錄下&#xff0c;打開CMD命令&#xff0c;復制上面的碼運行aut…

c#內存泄露的原因和解決辦法

內存泄漏的原因 不正確的對象引用&#xff1a;最常見的原因是對象不再需要時未被垃圾回收器回收。例如&#xff0c;如果一個對象被一個不再使用的變量引用&#xff0c;它將不會被垃圾回收。事件訂閱者未取消&#xff1a;如果訂閱了一個事件但沒有在對象不再需要時取消訂閱&…

TDengine Restful 接口API

簡介 為支持各種不同類型平臺的開發&#xff0c;TDengine 提供符合 RESTful 設計標準的 API&#xff0c;即 REST API。為最大程度降低學習成本&#xff0c;不同于其他數據庫 REST API 的設計方法&#xff0c;TDengine 直接通過 HTTP POST 請求 BODY 中包含的 SQL 語句來操作數…

【Contiki】Contiki process概述

00. 目錄 文章目錄 00. 目錄01. 進程類型02. 進程結構03. 事件04. 進程調度函數05. 程序實例06. process實現07. 附錄 01. 進程類型 進程類型主要有**協同式&#xff08;cooperative&#xff09;和搶占式&#xff08;preemptive&#xff09;**兩種。 協同式進程&#xff0c;要…

哪種電腦更穩定?Mac?Windows?還是云電腦? 實測解密

隨著科技的發展進步&#xff0c;電腦已成為當下各類群體的必備產品之一&#xff0c;它的妙用有很多&#xff0c;無論是學生黨、打工人還是已經退休的人群或都離不開它的存在。然而&#xff0c;電腦雖好卻也差異很大、不同品牌、不同系統、不同配置、不同價位的統統都會有區別。…

華為openEuler操作系統全解析:起源、特性與生態對比

華為openEuler操作系統全解析&#xff1a;起源、特性與生態對比 一、起源與發展歷程 openEuler&#xff08;歐拉操作系統&#xff09;是華為于2019年開源的Linux發行版&#xff0c;其前身為華為內部研發的服務器操作系統EulerOS。EulerOS自2010年起逐步發展&#xff0c;支持華…

第 7 期:DDPM 采樣提速方案:從 DDPM 到 DDIM

本期關鍵詞:采樣加速、DDIM 推導、可控性提升、偽逆過程、代碼實戰 前情回顧:DDPM 的采樣瓶頸 在前幾期中,我們構建了一個完整的 DDPM 生成流程。但是你可能已經發現: 生成一張圖像太慢了!!! 原因是: DDPM 要在 T 個時間步中一步步地去噪,從 x_T → x_0。而通常 T 至…

chrome中的copy xpath 與copy full xpath的區別

學過測試或者爬蟲的&#xff0c;都感覺獲取網頁元素&#xff0c;使用xpath最方便 但其中有一些細節可能會使你摸不清頭腦 比如有時候copy xpath會定位不準確&#xff0c;而使用copy full xpath就可以定位 1、copy xpath&#xff08;相對路徑定位&#xff09; 優點&#xff…

學習海康VisionMaster之中線查找

一&#xff1a;進一步學習了 今天學習下VisionMaster中的中線查找&#xff0c;這個就是字面意思&#xff0c;輸入兩條直線&#xff0c;輸出兩條直線的中線 二&#xff1a;開始學習 1&#xff1a;什么是中線查找&#xff1f;今天這個比較簡單&#xff0c;其實這個模塊算是一個幾…

深入淺出 Multi-Head Attention:原理 + 例子 + PyTorch 實現

本文帶你一步步理解 Transformer 中最核心的模塊&#xff1a;多頭注意力機制&#xff08;Multi-Head Attention&#xff09;。從原理到實現&#xff0c;配圖 舉例 PyTorch 代碼&#xff0c;一次性說清楚&#xff01; 什么是 Multi-Head Attention&#xff1f; 簡單說&#x…

常用 Git 命令詳解

Git 是一個強大的版本控制工具&#xff0c;廣泛用于軟件開發和團隊協作中。掌握 Git 命令可以幫助開發者更高效地管理代碼版本和項目進度。本文將介紹一些常用的 Git 命令&#xff0c;并提供示例以幫助你更好地理解和應用這些命令。 目錄 常用命令 git clonegit stashgit pul…

NO.96十六屆藍橋杯備戰|圖論基礎-多源最短路|Floyd|Clear And Present Danger|災后重建|無向圖的最小環問題(C++)

多源最短路&#xff1a;即圖中每對頂點間的最短路徑 floyd算法本質是動態規劃&#xff0c;?來求任意兩個結點之間的最短路&#xff0c;也稱插點法。通過不斷在兩點之間加?新的點&#xff0c;來更新最短路。 適?于任何圖&#xff0c;不管有向?向&#xff0c;邊權正負&…

電流模式控制學習

電流模式控制 電流模式控制&#xff08;CMC&#xff09;是開關電源中廣泛使用的一種控制策略&#xff0c;其核心思想是通過內環電流反饋和外環電壓反饋共同調節占空比。相比電壓模式控制&#xff0c;CMC具有更快的動態響應和更好的穩定性&#xff0c;但也存在一些固有缺點。 …

MATLAB 控制系統設計與仿真 - 36

魯棒工具箱定義了個新的對象類ureal,可以定義在某個區間內可變的變量。 函數的調用格式為&#xff1a; p ureal(name,nominalvalue) % name為變量名,nominalValue為標稱值&#xff0c;默認變化值為/-1 p ureal(name,nominalvalue,PlusMinus,plusminus) p ureal(name,nomin…

LeetCode -- Flora -- edit 2025-04-17

1.最長連續序列 128. 最長連續序列 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1&#xff1a; 輸入&#xff1a;nums [1…

Sql刷題日志(day3)

一、筆試 1、min(date_time)&#xff1a;求最早日期 2、mysql中distinct不能與order by 連用&#xff0c;可以用group by去重 二、面試 1、SQL中如何利用replace函數統計給定重復字段在字符串中的出現次數 (length(all_string)-length(all_string,目標字符串,))/length(ta…

解決 Spring Boot 多數據源環境下事務管理器沖突問題(非Neo4j請求標記了 @Transactional 嘗試啟動Neo4j的事務管理器)

0. 寫在前面 到底遇到了什么問題&#xff1f; 簡潔版&#xff1a; 在 Oracle 與 Neo4j 共存的多數據源項目中&#xff0c;一個僅涉及 Oracle 操作的請求&#xff0c;卻因為 Neo4j 連接失敗而報錯。根本原因是 Spring 的默認事務管理器錯誤地指向了 Neo4j&#xff0c;導致不相…

理解和實現RESTful API的最佳實踐

理解和實現RESTful API的最佳實踐 在當今數字化時代&#xff0c;APIs已成為軟件開發的核心組件&#xff0c;而RESTful API以其簡潔、靈活和可擴展性成為最流行的API設計風格。本文將深入探討RESTful API的概念、特點和實施指南&#xff0c;幫助開發者構建高效、可靠的Web服務。…

大語言模型微調技術與實踐:從原理到應用

大語言模型微調技術與實踐&#xff1a;從原理到應用 摘要&#xff1a;隨著大語言模型&#xff08;LLM&#xff09;技術的迅猛發展&#xff0c;預訓練語言模型在各種自然語言處理任務中展現出強大的能力。然而&#xff0c;將這些通用的預訓練模型直接應用于特定領域或任務時&am…

遨游科普:三防平板除了三防特性?還能實現什么功能?

在工業4.0浪潮席卷全球的今天&#xff0c;電子設備的功能邊界正經歷著革命性突破。三防平板電腦作為"危、急、特"場景的智能終端代表&#xff0c;其價值早已超越防水、防塵、防摔的基礎防護屬性。遨游通訊通過系統級技術創新&#xff0c;將三防平板打造為集通信中樞、…