對次小生成樹 Kruskal和prim 的理解

2021-07-24 09:52:13 字數 788 閱讀 6736

求次小的生成樹即求第二小的生成樹,次小生成樹可由最小生成樹換一條邊得到,一般採用的是求出最小生成樹後,依次刪除最小生成樹上的每一條邊,然後生成n-1個最小生成樹,記錄下這個過程中的最小生成樹的值,那麼這個就是第二小生成樹了,用kruskal這種演算法的複雜度為o(n*elog2e),當圖比較稠密時,複雜度接近o(n^3)

次小生成樹用kruskal的第一種方法

#includeusing namespace std;

int n,m;

struct data

p[20010];

vectorg[110];

int father[110],len[110][110];

const int oo=1e9;

bool cmp(data a,data b)

int main()

sides[maxn];

bool flag[maxn];

int sett[maxn];

int cmp(data a,data b)

for(i=2; i<=n; i++) //prim

}return res;

}int main()

ans=prim();//最小生成樹的權值

for(i=1; i<=n; i++)

if(ans1==ans)

}if(!ok)

break;

}printf("ans=%d ans1=%d\n",ans,ans1);

}return 0;

}

次小生成樹 prim和kruskal

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

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...