最小生成樹 Prim

2022-06-08 22:54:27 字數 707 閱讀 5119

\(一道裸題\)

\(最小生成樹有兩種演算法:prim \ 和\ kruskal.\)

\(prim:o(n^2)\)

\(kruskal:o(mlogm)\)

\(如何證明演算法正確(如何證明當前這條邊一定可以被選)\ ?\)

\(假設不選當前邊,最終得到了一棵樹,然後將這條邊加上,那麼必然形成乙個環,在這個環上,\\一定可以找出一條不小於當前邊的邊,那麼把當前邊替換,結果一定不會變差.\)

#include using namespace std;

#define io ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)

inline int lowbit(int x)

#define ll long long

#define pb push_back

#define pii pair#define x first

#define y second

#define inf 0x3f3f3f3f

const int n = 110;

int n;

int w[n][n];

int dist[n];

bool st[n];

int prim()

return res;

}int main()

最小生成樹 Prim

include stdio.h include stdlib.h include io.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define maxedge 20 ...

最小生成樹 prim

演算法模型 由任意乙個頂點開始 將此頂點存入s集,剩餘頂點存入t集合 每次遍歷頂點,取一條能夠連線s與t最短邊e,直到所有頂點全部加入s include include define inf 1 30 int n,m,vis 110 low 110 int map 110 110 int init ...

最小生成樹 PRIM

這個是有關普利姆的演算法,從乙個點出發,找出與這個點相連的所有點的對應的權值最小的那個,然後再把這個點從集合中劃掉。模板如下 include include define inf 0xfffff define max 2005 using namespace std int map max max ...