次小生成樹(Prim)

2021-08-31 09:28:59 字數 882 閱讀 7037

這裡的思路就是先用prim演算法求的最小生成樹,然後在prim演算法中新增乙個max陣列,用max陣列存放兩點間的最大距離,並且用乙個use陣列(布林型別)存放是否使用過該邊,最後再在沒有使用的變進行遍歷,找出最小,求的最小生成樹!

下面介紹一下利用prim求次小生成樹的主要步驟。

1.先求出來最小生成樹。並將最小生成樹任意兩點之間路徑當中的權值最大的那一條找出來,為什麼要找最大的呢,因為生成樹加入一條邊之後一定構成了迴路,那麼肯定要去掉這個迴路當中一條邊才是生成樹,那麼,怎麼去邊才是次小的,那就去掉除了剛剛新增的一條邊之外迴路當中權值最大的乙個,所以留下的就是最小的。

2.列舉最小生成樹外的每一條邊。找出最小的就是次小生成樹。

const int maxn = 110;

const int inf = 0x3f3f3f3f;

bool vis[maxn];

int low[maxn];

int pre[maxn];

int max[maxn][maxn];

bool used[maxn][maxn];

int cost[maxn][maxn];

int prime(int n)

}if(p==-1)

return -1;

ans+=minc;

vis[p]=true;

used[pre[p]][p]=used[p][pre[p]]=true;

for(int j=1;jcost[p][j])}}

return ans;

}

貼上乙個例題

**明天發

次小生成樹 Prim

我們最常見的是最小生成樹,我們最長使用的是prim和kruskal演算法,乙個是對點進行處理,乙個是對邊進行處理,對於次小生成樹來說我們同樣可以使用這兩個方法進行處理,這裡我們先以prim的寫法為例。首先我們要清楚的是什麼是最小生成樹 乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原...

次小生成樹 prim求法入門

結合例題和 以及注釋可能會更好理解一些 poj 1679 the unique mst 次小生成樹 設g v,e,w 是連通的無向圖,t是圖g的一顆最小生成樹。如果有另一棵樹t1,滿足存不存在樹t t t1 則稱t1是圖g的次小生成樹。次小生成樹一般又最小生成樹的鄰集求得。鄰集的概念 由t進行一次可...

次小生成樹 prim和kruskal

prim 先用prim求出最小生成樹t,在prim的同時,用乙個矩陣maxd u v 記錄 在t中鏈結任意兩點u,v的唯一的路中權值最大的那條邊的權值,這是很容易做到的,因為prim是每次增加乙個結點s,在此需要儲存節點和其父節點,採用dp,則最大權值要麼是新加入的邊,要麼是父節點到起始點的採用dp...