a:生成樹
b:未被訪問過的點的集合
pre[i]:生成樹中i的前驅節點。
a中的dis[i]:生成樹中包含點i的邊的長度。
b中的dis[i]: i到a的最短距離
vis:標記是否遍歷過(是否屬於a)
prim演算法的思想
1.任選一點,不妨選擇第乙個點,加入生成樹a。
2.遍歷b,尋找一點u,使其到a的距離最小(就是a中也找了一點v)。新增u到a中(vis)。記錄這條邊及其權值(pre,dis)。
3.更新與u相連的點的dis和pre
4.迴圈直到遍歷所有可達的點。
view code
#include #include基本的最小生成樹題目。using
namespace
std;
#define max 100
void prim(int n, int map[max][max], int dis[max], int
pre[max])
visit[
1] = true
;
dis[
1] = 0
;
//迴圈n-1次,每次加入乙個點
for (int i = 1; i < n; ++i)
}//找不到
if (next == 0)return
;
//加入生成樹
visit[next] = true
;
//更新與k相鄰的頂點。
for (int j = 2; j <= n; j++)}}
}
view code
/*【題目**】
最小生成樹。
【題目分析】
給定鄰接矩陣,求最小生成樹的最長邊。
【思路分析】
prim演算法。
*/#include
#include
#include
#include
#include
using
namespace
std;
#define max 502
intmap[max][max], dis[max], pre[max];
bool prim(int
n)
vis[
1] = true
;
dis[
1] = 0
;
//迴圈n-1次
for (int i = 1; i < n; ++i)
}//找不到
if (k == 0) return
false
;
//加入生成樹
vis[k] = true
;
//更新其他各點
for (int j = 1; j <= n; ++j)}}
}int
main()
}prim(n);
cout
<< *max_element(dis, dis+n+1) <}}
最小生成樹 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 ...