這裡只是給出按照正常自然人的分析過程,不想涉及**。
首先理解一下什麼是最小生成樹,用乙個例子
要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間都可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同,因此另乙個目標是要使鋪設光纜的總費用最低。這就需要找到帶權的最小生成樹。
實際上這個很像揹包問題,但是區別在於最小生成樹沒有重複問題,只要路徑最短就可以了。
下面分析一下乙個簡單的思考過程
以此圖為例子。從a點出發,根據權重,選擇d點。此時選擇路徑ad=5;
然互在和a、d都相關的b、f、e中尋找權重最小的f點;此時選擇路徑df=6;
然後在和adf都相關的點裡面再尋找權重最小的點,此時ab的權重最小選擇b點。此時選擇路徑ab=7;
然後在cef中再尋找權重最小的點。很明顯選擇e點e點。此時選擇路徑be=7;
然後在cg中尋找,很明顯選擇c點。此時路徑為ce=5;
然後再g中尋找,結束:此時路徑為eg=9;
上面是自然人的選擇過程,的確如此,歸納一下,這個過程是如何完成的,
以乙個點為起點,為了最短路徑,一定是找權重最小的,尋找到下乙個點,然後將找到的點作為一類,再找離這個類最近的點。
然後重複這個過程,直到找完所有點。
接下來需要解決的問題就是,如何用基本資料結構將這種關係(如下)表示出來
a-d 5
a-b 7
。。。想到用樹,但是有個問題就是,在這裡abd是無序的,誰是根節點有點問題。而且要便於後面的查詢權重。
用二維陣列是可以表示這種關係的,比如
最小生成樹問題
1.構造可以使n個城市連線的最小生成樹。問題描述 給定乙個地區的n個城市間的距離網,用prim演算法或kruskal演算法建立最小生成樹,並計算得到的最小生成樹的代價。4 要求 1 城市間的距離網採用鄰接矩陣表示,鄰接矩陣的儲存結構定義採用課本中給出的定義,若兩個城市之間不存在道路,則將相應邊的權值...
最小生成樹問題
最小生成樹 是一棵樹 無迴路 個頂點一定有 條邊 包含全部頂點 條邊都在圖里 邊的權重和最小 生成約束 只能用圖里有的邊 只能正好用掉 條邊 不能有迴路 主要演算法 prim演算法 讓樹長大 int prim int n int ans 0 距離權值總和 vis 1 true 生成樹的根 起點 標記...
最小生成樹問題
最小生成樹 乙個有n個點的圖,邊一定是大於等於n 1條的。圖的最小生成樹,就是在這些邊中選擇n 1條出來,連線所有的n個點。這n 1條邊的邊權之和是所有方案中最小的。最小生成樹用來解決什麼問題?就是用來解決如何用最小的 代價 用n 1條邊連線n個點的問題。例題 洛谷p3366 乾坤大挪移 最小生成樹...