最小生成樹問題,python解法
思路很簡單:
主要是建立兩個集合,一個表示已經遍歷過的節點集合S,另一個表示還沒有遍歷過的節點W,演算法的主要思想借鑑了prim演算法,但是我沒有盡行歸併操作,直接遍歷S和W中的點,尋找最短的邊,從W中刪除,並加入S中,本文參考:https://blog.csdn.net/qq_35644234/article/details/59106779,主要Python演算法程式碼如下:
# 最小生成樹,動態規劃解法 class Solution: def __init__(self,X,start_node): self.X = X self.start_node = start_node def prim(self): num = len(self.X) first_node = self.start_node last_node = self.start_node sets = range(num) sets.pop(first_node) first_set = [self.start_node] self.dtgh(first_set,sets) return first_set def dtgh(self,past_sets,sets): if len(sets) == 0: return d_i = [] d_min = 10000 # 遍歷還未經過的節點 for i in range(len(sets)): d_ij = [] # 儲存已經過集合中所有節點(j)到新集合中i節點的距離 for j in past_sets: d_ij.append(self.X[j][sets[i]]) # 尋找最短的i節點到j節點的路徑 if min(d_ij)<d_min: # 最短路徑中的(位於老集合中的節點)j節點 j_min = d_ij.index(min(d_ij)) # 最短路徑中的(位於新集合中的節點)i節點 i_d = i d_i.append(min(d_ij)) #求取所有i(新集合)節點與老集合的最小距離集合 d_min = min(d_ij) #參與迴圈 d_increase = min(d_i) # 當前最短路徑(j,i)的最短距離 print past_sets[j_min], "---->", sets[i_d], "the distance", d_increase past_sets.append(sets[i_d]) sets.pop(i_d) self.dtgh(past_sets,sets) D = [[0,6,1,5,999,999],[6,0,5,999,3,999],[1,5,0,5,6,4],[5,999,5,0,999,2],[999,3,6,999,0,6],[999,999,4,2,6,0]] start_node = 0 S = Solution(D,start_node) S.prim()
相關推薦
[2017年第0屆浙江工業大學之江學院程序設計競賽決賽 I] qwb VS 去汙棒(並查集,按秩合並,最小生成樹,LCA)
之間 i++ ont 題意 倍增 題目 while 並查集 工業 題目鏈接:http://115.231.222.240:8081/JudgeOnline/problem.php?cid=1005&pid=8 題意:中文題面。 手動畫一下會發現所求邊必然存在於最大生
關於最小生成樹,拓撲排序、強連通分量、割點、2-SAT的一點筆記
時間戳 def 條件 問題 復習 lin 由於 保留 染色 關於最小生成樹,拓撲排序、強連通分量、割點、2-SAT的一點筆記 前言:近期在復習這些東西,就xjb寫一點吧。當然以前也寫過,但這次偏重不太一樣 MST 最小瓶頸路:u到v最大權值最小的路徑。在最小生成樹上。是次小
題解——洛谷P1550 [USACO08OCT]打井Watering Hole(最小生成樹,建圖)
mount scan -o another 決定 clas con pan 通過 題面 題目背景 John的農場缺水了!!! 題目描述 Farmer John has decided to bring water to his N (1 <= N <=
秋季學期一起開心講課-week06-最短路徑,最小生成樹,二分圖,存圖方式
存圖的兩種方式: 1.鄰接矩陣 #include<iostream> #include<cstirng> using namespace std; #define maxn 1000 int mat[maxn][maxn]; int main() { //初始化
poj1751Highways(最小生成樹,部分邊已連通)
Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21991
poj 2349Arctic Network(最小生成樹,按序加邊一些邊已聯通)
Description The Department of National Defence (DND) wishes to connect several northern outposts by a wireless network. Two different communication
資料結構--C語言--圖的深度優先遍歷,廣度優先遍歷,拓撲排序,用prime演算法實現最小生成樹,用迪傑斯特拉演算法實現關鍵路徑和關鍵活動的求解,最短路徑
實驗七 圖的深度優先遍歷(選做,驗證性實驗,4學時) 實驗目的 熟悉圖的陣列表示法和鄰接表儲存結構,掌握構造有向圖、無向圖的演算法 ,在掌握以上知識的基礎上,熟悉圖的深度優先遍歷演算法,並實現。 實驗內容 (1)圖的陣列表示法定義及
一個圖的兩棵最小生成樹,邊的權值序列排序後結果相同
情形2樹A中並不包含邊bi,則把bi加到樹A上,形成一個圈,由於A是最小生成樹,這個圈裡任意一條邊的權值都不大於w(bi) ,另外,這個圈裡存在邊aj不在樹B中。因此,有w(aj)≤w(bi),且j>i (因為aj不在B中)。於是,有w(bi)≤w(ai)≤w(aj)≤w(bi),因此w(ai)= w(
[轉載]有向圖的最小生成樹,最小樹形圖
轉載: 有固定根的最小樹形圖求法O(VE): 首先消除自環,顯然自環不在最小樹形圖中。然後判定是否存在最小樹形圖,以根為起點DFS一遍即可。 之後進行以下步驟。 設cost為最小樹形圖總權值。 0.置cost=0。 1.求最短弧集合Ao (一條弧就是
最小生成樹演算法(python實現)
Kruskal演算法 Kruskal演算法是一種構造最小生成樹的簡單演算法,其中的思想比較簡單。基本思想 設G=(V,E)是一個網路,其中|V|=n。Kruskal演算法構造最小生成樹的過程是: 初始時取包含G中所有n個頂點但沒有任何邊的孤立點子圖T=(V,{}),T裡的
poj1258 Agri-Net 最小生成樹,kruskal演算法
思路:原始的最小生成樹。第一次寫kruskal演算法,一開始老是RE,還不明白怎麼了,原來連kruskal的過程都忘了。對不起資料結構老師。。。 ///2014.7.7 ///poj1258 /* *最小生成樹,kruskal演算法 */ #include <
ZOJ 1203 Swordfish 劍魚行動 最小生成樹,Kruskal演算法
Swordfish Time Limit: 2 Seconds Memory Limit: 65536 KB There exists a world within our world A world beneath what we call cybersp
【圖論-MST】POJ 1251 Jungle Roads 叢林中的道路,最小生成樹,Kruskal演算法
Jungle RoadsTime Limit: 2 Seconds Memory Limit: 65536 KBThe Head Elder of the tropical island of Lagrishan has a problem. A burst of
【UVa】11354 Bond 最小生成樹,動態LCA,倍增思想
Bond Once again, James Bond is on his way tosaving the world. Bond's latest mission requires him to travel between se
HDU 1301 &POJ 1215 Jungle Roads【最小生成樹,Prime演算法+Kruskal演算法】
The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago.
最小生成樹問題,python解法
思路很簡單: 主要是建立兩個集合,一個表示已經遍歷過的節點集合S,另一個表示還沒有遍歷過的節點W,演算法的主要思想借鑑了prim演算法,但是我沒有盡行歸併操作,直接遍歷S和W中的點,尋找最短的邊,從W中刪除,並加入S中,本文參考:https://blog.csdn.net/
【最小生成樹】【kruscal】【貪心】CDOJ1636 夢後樓臺高鎖,酒醒簾幕低垂
ext 停止 min 時間 定義 cal ssi sin 我們 給你一個有n個點和m條邊的無向連通圖,每條邊都有一個權值ww.我們定義,對於一條路徑,它的Charm value為該路徑上所有邊的權值的最大值與最小值的差.詢問從1到n的所有路徑的Charm value的最小值
[Poj2349]Arctic Network(二分,最小生成樹)
接下來 使用 log 小數 NPU mes poj 國防 sam [Poj2349]Arctic Network Description 國防部(DND)要用無線網絡連接北部幾個哨所。兩種不同的通信技術被用於建立網絡:每一個哨所有一個無線電收發器,一些哨所將有一個衛星頻道。
【CF125E】MST Company(凸優化,最小生成樹)
als space false truct main math tdi 給人 kruskal 【CF125E】MST Company(凸優化,最小生成樹) 題面 洛谷 CF 題解 第一眼看見就給人麗潔姐那道\(tree\)一樣的感覺。 那麽二分一個權值,加給所有有一個端點是
最大生成樹poj2377 (和最小生成樹一個原理,只是排序的時候要降序排列)
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=1000+10; const int maxm=20000+10; struc