C語言prim算法求最小生成樹

Prim算法是一種用于尋找無向帶權圖的最小生成樹的算法。該算法的基本思想是從一個源點開始,逐步向外擴展生成樹,每次找到與當前生成樹最近的未被訪問的頂點,并將其加入到生成樹中,直到所有頂點都被加入到生成樹中為止。

具體來說,Prim算法維護兩個集合:一個是已經被加入到生成樹中的節點集合,一個是還未加入到生成樹中的節點集合。算法從任一一個源點開始,將其加入到已加入節點集合中,并將其與未加入節點集合中的節點之間的距離記錄下來。然后,每次從未加入節點集合中找出距離當前生成樹最近的節點,將其加入到已加入節點集合中,同時更新所有未加入節點集合中的節點到已加入節點集合的最小距離。重復這個過程,直到所有頂點都被加入到生成樹中為止。最終生成的樹就是最小生成樹。

該算法的時間復雜度為O(V^2),其中V表示頂點數;如果使用堆等數據結構來優化,則時間復雜度可以達到O(ElogV),其中E表示邊數。Prim算法與Kruskal算法都是求解最小生成樹的經典算法,具有實際應用價值。

C語言實現Prim算法的代碼,用于求解無向帶權圖的最小生成樹:

#include <stdio.h>
#include <limits.h>#define V 5 // 圖中頂點數
#define INFINITY INT_MAX // 無窮大表示兩點之間沒有連線int minKey(int key[], bool mstSet[]) {int min = INFINITY, min_index;for (int v = 0; v < V; v++)if (mstSet[v] == false && key[v] < min)min = key[v], min_index = v;return min_index;
}void printMST(int parent[], int graph[V][V]) {printf("Edge \tWeight\n");for (int i = 1; i < V; i++)printf("%d - %d \t%d \n", parent[i], i, graph[i][parent[i]]);
}void primMST(int graph[V][V]) {int parent[V]; // 存儲最小生成樹int key[V]; // 存儲每個節點到樹的距離bool mstSet[V]; // 記錄每個節點是否已在最小生成樹中for (int i = 0; i < V; i++)key[i] = INFINITY, mstSet[i] = false;key[0] = 0; // 選取第一個節點作為根節點parent[0] = -1;for (int count = 0; count < V - 1; count++) {int u = minKey(key, mstSet);mstSet[u] = true;for (int v = 0; v < V; v++) {if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])parent[v] = u, key[v] = graph[u][v];}}printMST(parent, graph);
}int main() {int graph[V][V] = { { 0, 2, 0, 6, 0 },{ 2, 0, 3, 8, 5 },{ 0, 3, 0, 0, 7 },{ 6, 8, 0, 0, 9 },{ 0, 5, 7, 9, 0 } };primMST(graph);return 0;
}

其中,graph 數組表示無向帶權圖的鄰接矩陣,V 表示頂點數。函數 primMST 就是Prim算法實現的主體部分,依次找出距離當前樹最近的頂點,并將其加入到當前樹中,并更新每個節點到樹的距離。最終輸出每條邊的權值,即為最小生成樹。

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

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

相關文章

部署你的第一個應用

&#x1f5d3;?實驗環境 OS名稱Microsoft Windows 11 家庭中文版系統類型x64-based PCDocker版本Docker version 24.0.6, build ed223bcminikube版本v1.32.0 &#x1f913;FastAPI 構建應用 #基于fastapi快速創建一個項目 rkun1LAPTOP-TUS5FU0D MINGW64 / $ mkdir k8s-appr…

1688 API接口測試指南

本文為您提供1688 API接口的測試指南。我們將介紹1688 API的基本概念&#xff0c;詳解測試步驟&#xff0c;并為您提供一系列的最佳實踐&#xff0c;以確保您在與1688平臺進行API交互時能夠獲得最佳的效果和穩定性。 一、了解1688 API 1688 API是1688平臺為開發者提供的一套用…

數學建模之擬合及其代碼

發現新天地&#xff0c;歡迎訪問Cr不是鉻的個人網站 引言 與插值問題不同&#xff0c;在擬合問題中不需要曲線一定經過給定的點。擬合問題的目標是尋求一個函數&#xff08;曲線&#xff09;&#xff0c;使得該曲線在某種準則下與所有的數據點最為接近&#xff0c;即曲線擬合…

基于跳蛛算法優化概率神經網絡PNN的分類預測 - 附代碼

基于跳蛛算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于跳蛛算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于跳蛛優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xff1a;針對PNN神經網絡的光滑…

7_畫圖常用代碼

plt.figure(dpi200) # 設置 dpi 為 200&#xff08;可以根據需要調整這個值&#xff09;

數據結構學習筆記——多維數組、矩陣與廣義表

目錄 一、多維數組&#xff08;一&#xff09;數組的定義&#xff08;二&#xff09;二維數組&#xff08;三&#xff09;多維數組的存儲&#xff08;四&#xff09;多維數組的下標的相關計算 二、矩陣&#xff08;一&#xff09;特殊矩陣和稀疏矩陣&#xff08;二&#xff09;…

從權限跳轉看Activity的data android:scheme

在應用申請懸浮窗權限的時候&#xff0c;可以跳轉到相應的設置界面&#xff0c;并且自動切換到應用的條目&#xff0c;高亮顯示一下&#xff0c; android懸浮窗權限怎么申請 在Android中&#xff0c;要申請懸浮窗權限&#xff0c;需要以下步驟&#xff1a; 在 AndroidManifes…

hp惠普Victus Gaming Laptop 15-fa1025TX/fa1005tx原裝出廠Win11系統ISO鏡像

光影精靈9筆記本電腦原廠W11系統22H2恢復出廠時開箱狀態一模一樣 適用型號&#xff1a;15-fa1003TX&#xff0c;15-fa1005TX&#xff0c;15-fa1007TX&#xff0c;15-fa1025TX 鏈接&#xff1a;https://pan.baidu.com/s/1fBPjed1bhOS_crGIo2tP1w?pwduzvz 提取碼&#xff1a…

每天一道算法題(十一)——滑動窗口最大值_困難(中等)

文章目錄 1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——雙指針 總結 1、問題 給你一個整數數組 nums&#xff0c;有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。 返回 滑動窗…

c++ 函數的申明

1 一個cpp中 兩種情況 1.1 定義 使用 1.2 聲明 使用 定義 2 按 定義 后 直接使用的順序 不用 聲明 函數 #include <iostream> using namespace std;int max(int a, int b) {int max a>b?a:b;return max; }int main() {int a 1;int b 2;cout << max(a, b…

解決vue中引入天地圖顯示不全問題,設置setTimeout即可解決!

index.html中引入天地圖api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地圖 //初始化天地圖 initTMap() {const T window.T;// 3.初始化地圖對象this.tMap new…

flink1.13.6版本的應用程序(maven版)

問題 想要一個指定flink版本的java計算任務hello world最簡工程。 解決 mvn archetype:generate \-DarchetypeGroupIdorg.apache.flink \-DarchetypeArtifactIdflink-quickstart-java \-DarchetypeVersion1.13.6這里直接使用官方mave模版工程&#xff0c;指…

系統架構設計:13 論基于構件的軟件開發

論基于構件的軟件開發 軟件系統的復雜性不斷增長、軟件人員的頻繁流動和軟件行業的激烈竟爭迫使軟件企業提高軟件質量、積累和固化知識財富,并盡可能地縮短軟件產品的開發周期。 集軟件復用、分布式對象計算、企業級應用開發等技術為一體的“基于構件的軟件開發”應運而生,…

LeetCode 2304. 網格中的最小路徑代價:DP

【LetMeFly】2304.網格中的最小路徑代價&#xff1a;DP 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/minimum-path-cost-in-a-grid/ 給你一個下標從 0 開始的整數矩陣 grid &#xff0c;矩陣大小為 m x n &#xff0c;由從 0 到 m * n - 1 的不同整數組成。你可以…

【python基礎(二)】列表詳解

文章目錄 一. 訪問列表元素二. 使用列表中的各個值三. 修改、添加和刪除元素1. 修改列表元素2. 在列表中添加元素3. 從列表中刪除元素 四.組織列表1. sort()對列表永久排序2. sorted()對列表臨時排序3. 倒著打印列表4. 確定列表的長度 列表由一系列按特定順序排列的元素組成。可…

Django框架之Cookie和Session和CBV加裝飾器的三種方法

【一】Cookie與Session Cookie和Session是用來在Web應用程序中跟蹤用戶會話數據的兩種常用技術。 【1】Cookie和Session的發展史 【1】Cookie的發展史&#xff1a; 1994年&#xff0c;網景通信公司推出了第一個瀏覽器Cookie技術。Cookie是存儲在用戶計算機上的小型文本文件…

redis五種基本數據類型

redis存儲任何類型的數據都是以key-value形式保存&#xff0c;并且所有的key都是字符串&#xff0c;所以討論基礎數據結構都是基于value的數據類型 常見的5種數據類型是&#xff1a;String、List、Set、Zset、Hash 一) 字符串(String) String是redis最基本的類型&#xff0c;v…

linux日志不循環問題診斷

有一臺Linux虛擬機的messages日志文件自2023年7月下旬開始沒有按周為周期重新生成新的日志&#xff0c;一直累積在同一個messages文件中&#xff0c;如下所示&#xff1a; [root logrotate.d]# ls -l /var/log|grep me -rw-r--r-- 1 root root 107170 Nov 15 1…

地圖導航測試用例,你get了嗎?

地圖導航是我們經常使用的工具&#xff0c;能幫助我們指引前進的方向。 接下來&#xff0c;會從功能測試、UI測試、兼容測試、安全測試、網絡測試、性能測試、易用性測試、文檔和國際化語言測試8個方面來編寫地圖導航測試用例。 一 功能測試 輸入起點和終點&#xff0c;驗證…

python3.7升級為更高版本并遷移庫

創建虛擬環境 # 在進入當前的虛擬環境【py3.7的環境】使用pip導出全部包txt文件 pip freeze > all_package.txt# 創建虛擬環境 conda create -n py39 python3.9# 激活新創建的虛擬環境 conda activate py39# 用 pip 一鍵文件安裝 # pip install --help 查看-r命令的作用 # …