最小生成樹 prim最小堆(優先佇列)優化演算法

2021-08-21 21:11:01 字數 966 閱讀 2045

基本prim最小生成樹

1·任意定點構樹————標記陣列標記入樹

2·初始化更新維護dis陣列

3·選出dis中最近的點j加入樹中,並以j為起點鬆弛

4.重複第3步選出n-1個點

堆優化prim最小生成樹 準備:dis陣列,p優先佇列,vis陣列記錄每個定點在最小堆中的位置

1.初始化優先佇列,以定義的起點為起點的所有的邊入隊

2.彈出一條邊,判斷vis,如果邊的終點訪問了換邊,直至沒有訪問過

3.以這條邊的指向點為起點,根據vis陣列選擇性入隊

4.重複指行n-1次,得出最小生成樹————ps每一次執行都會得出一條邊

看下面詳細**

#include #include #include #include #include #define inf (1 << 30)

using namespace std;

const int maxn = 110;

const int maxm = 5e5 + 50;

int dis[110];

struct node

}e[maxm];

int id[maxn],cnt;

int vis[maxn];

priority_queueq;

void init(int n)

void add(int from,int to,int cost)

int queue_prim(int s,int n)

}res += now.cost;

vis[now.to] = 1;

for(int j = id[now.to];~j;j = e[j].pre)

}return res;

}int main()

printf("%d\n",queue_prim(1,n));

}return 0;

}

最小生成樹 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 ...