文章編號:9735時間:2024-09-27人氣:
克魯斯卡爾算法是一種經典的貪心算法,用于解決加權無向圖中的最小生成樹問題。該算法致力于構建一棵包含圖中所有頂點的樹,同時確保樹中邊的總權重最小。在 C++ 中實現克魯斯卡爾算法相對簡單,但有幾種優化可以顯著提高其效率。
以下是最基本的克魯斯卡爾算法實現:
includeinclude include using namespace std;Struct Edge {int u, v, w; // u 和 v 是端點,w 是權重 };bool compare(const Edge& a, const Edge& b) {return a.w < b.w; // 根據權重從小到大排序 }int find(vector & parent, int u) {if (parent[u] != u) {parent[u] = find(parent, parent[u]);}return parent[u]; }int unite(vector & parent, vector & rank, int u, int v) {int uroot = find(parent, u);int vroot = find(parent, v);if (uroot != vroot) {if (rank[uroot] < rank[vroot]) {parent[uroot] = vroot;} else if (rank[uroot] > rank[vroot]) {parent[vroot] = uroot;} else {parent[vroot] = uroot;rank[uroot]++;}} }int kruskal(vector & edges, int n) {vector parent(n);vector includeinclude include using namespace std;struct Edge {int u, v, w; // u 和 v 是端點,w 是權重 };bool compare(const Edge& a, const Edge& b) {return a.w < b.w; // 根據權重從小到大排序 }class DSU { private:vector parent;vector rank;public:DSU(int n) {parent.resize(n);rank.resize(n, 0);for (int i = 0; i < n; i++) {parent[i] = i;}}int find(int u) {if (parent[u] != u) {parent[u] = find(parent[u]);}return parent[u];}int unite(int u, int v) {int uroot = find(u);int vroot = find(v);if (uroot != vroot) {if (rank[uroot] < rank[vroot]) {parent[uroot] = vroot;} else if (rank[uroot] > rank[vroot]) {parent[vroot] = uroot;} else {parent[vroot] = uroot;rank[uroot]++;}}} };int kruskal(vector & edges, int n) {DSU dsu(n);sort(edges.begin(), edges.end(), compare); // 按權重從小到大排序int total_weight = 0;for (auto edge : edges) {int u = edge.u; int v = edge.v;int w = edge.w;int uroot = dsu.find(u);int vroot = dsu.find(v);
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.hudongshop.com/article/ab793e48b7e5a0a27482.html,復制請保留版權鏈接!
引言在設計跨平臺應用程序時,確保用戶體驗在所有平臺上保持一致至關重要,onPrimary是MaterialDesign中一種重要的顏色屬性,它可以幫助開發者創建在不同平臺上看起來都很協調的應用程序,什么是onPrimary,onPrimary是MaterialDesign中第二重要的顏色,僅次于primary,它主要用于文本和圖標的顏...。
最新資訊 2024-09-26 08:23:05
簡介本教程將指導您使用Flex和Java從頭開始構建移動應用程序,我們使用的工具是AdobeFlexBuilder,它是一個用于構建跨平臺移動應用程序的集成開發環境,IDE,先決條件安裝FlexBuilder安裝Java開發工具包,JDK,安裝AndroidSDK創建新項目在FlexBuilder中,單擊,文件,>,新建,&g...。
最新資訊 2024-09-25 23:04:43
引言PHPSession是在服務器端存儲和管理用戶會話信息的一種技術,它允許開發人員將與特定用戶相關的數據與用戶關聯,即使用戶在會話期間關閉和重新打開瀏覽器,除了存儲基本信息,如用戶名和用戶ID,之外,會話數據還可用于實現許多高級功能,例如,個性化內容跟蹤用戶活動保護會話免受安全威脅在本文中,我們將探索PHPSession的一些高級用...。
最新資訊 2024-09-25 13:45:29
使用VideoFileClip類加載視頻文件非常簡單,只需使用以下代碼即可,clip=mp.VideoFileClip,video.mp4,其中,clip是一個包含視頻文件的VideoFileClip對象,video.mp4是要加載的視頻文件的路徑,一旦加載了視頻文件,就可以使用VideoFileClip對象來執行各種操作,例如,獲取...。
技術教程 2024-09-24 08:17:01
在設計中,對比是讓元素脫穎而出的關鍵因素,通過使用對比鮮明的色彩和字體,你可以吸引讀者的注意力并傳達重要信息,色彩對比色彩對比是指不同色彩之間亮度和色調的差異,高對比度色彩組合可以產生強烈的視覺效果,而低對比度色彩組合則更加微妙,使用對比鮮明的色彩可以,吸引注意力傳達重要信息創建視覺層次結構提高可讀性以下是一些高對比度色彩組合的示例,...。
最新資訊 2024-09-24 04:31:32
margin,top屬性是CSS中一個強大的工具,它允許你控制元素垂直方向上的外邊距,掌握這個屬性的精髓對于創造美觀實用的CSS布局至關重要,控制元素間距margin,top的最基本用法是控制元素之間的垂直間距,通過設置不同的margin,top值,你可以調整元素之間的空白空間,從而創建不同的視覺效果,給段落添加10px的上外邊距,...。
技術教程 2024-09-15 08:19:27
區分直覺和恐懼或欲望,有時,我們的恐懼或欲望可能會偽裝成直覺,重要的是要能夠區分兩者之間的區別,克服自我懷疑,我們可能會質疑我們的直覺,特別是如果它與我們的邏輯思考相矛盾,重要的是要信任我們的直覺,即使它感覺不合理,避免過度依賴,雖然直覺是一種寶貴的工具,但我們不應該完全依賴它,我們需要平衡理性和直覺,以做出明智的決策,結語直覺是一...。
最新資訊 2024-09-13 11:16:47
RAID基本概念RAID,獨立磁盤冗余陣列,是一種數據存儲技術,它將多個磁盤驅動器組合在一起,以提高性能、可靠性和數據保護,RAID0,數據條帶化,沒有冗余,提供更高的性能,RAID1,鏡像,每個數據塊都存儲在兩個不同的磁盤上,提供高度的冗余,RAID5,奇偶校驗條帶,數據塊分布在多個磁盤上,并使用奇偶校驗位進行冗余,提供良好的性能和...。
技術教程 2024-09-13 03:19:30
前言可編程邏輯控制器,PLC,編程認證是對PLC編程技能的一種認可,在工業自動化領域越來越受歡迎,獲得認證表明您具備必要的知識和技能,可以在自動化系統中高效可靠地編程PLC,本文旨在為PLC編程認證備考提供全面的指南,幫助您最大程度地提高通過考試的機會,認證選項市場上有各種不同的PLC編程認證,包括,西門子TIAPortal認證羅克韋...。
本站公告 2024-09-12 18:50:59
簡介ASP,ActiveServerPages,是一種服務器端腳本技術,用于創建動態且交互式的Web頁面,它允許開發人員使用腳本語言在服務器端處理請求,并返回動態生成的內容,本文檔將探討ASP開發的進階技術和最佳實踐,以幫助開發人員創建高效、安全和可維護的Web應用程序,高級技術1.對象模型ASP對象模型提供了一個編程接口,允許開發人...。
互聯網資訊 2024-09-09 05:22:39
簡介C語言是一種強大的低級編程語言,廣泛用于開發操作系統、嵌入式系統和高性能應用程序,為了將C程序轉換成機器可執行代碼,需要使用一個編譯器,編譯器是一種軟件,它將源代碼轉換為目標代碼,目標代碼可以在特定的計算機體系結構上運行,理解C語言編譯器的內部運作原理對于理解C語言的編譯過程和優化代碼至關重要,本文將深入探討編譯器的各個階段,并提...。
本站公告 2024-09-08 18:25:44
歡迎來到海量小程序模板源碼集錦,這里提供了各種類別的優質小程序模板源碼,滿足您的開發需求,類別電商教育社交娛樂生活服務工具模板列表電商小程序模板適用于各種電商業務,提供商品展示、購物車、訂單管理、物流查詢等功能,查看詳情教育小程序模板適用于教育機構,提供課程展示、在線學習、作業提交、考試管理等功能,查看詳情社交小程序模板適用于社交網絡...。
本站公告 2024-09-07 16:37:04