最小生成樹——prim演算法
用鄰接矩陣存放整個圖的資訊(注意無向圖的對稱性),用乙個整型陣列on來存放已經加入的點,用乙個結構體陣列存放每個點的資訊,包括與之距離最短的點another,兩點的權值weigh,以及flag標記是否已被選取。先將第乙個點放入on陣列中,每次放入的時候所有未選用的點資訊都需要更新(即比較上一次最短距離和與新點之間的距離大小,然後修改weigh和another),然後從中選取weigh最小的點,輸出其another與其自身,表示一條新的邊,然後將該點存入on陣列,其flag置為1,重複操作,直到點全部被選完
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
6061
6263
6465
6667
6869
7071
#include#define max 0xfffffff
using
namespace
std;
typedef
struct
d d;
d dian[100];//存放點的資訊
int ok[100];//存放已連線點
intmap[100][100];
char str[100];
int n;
intchange
(char x)
}void
find
(int j)}}
intmain
()for(int i=0; i
for(int j=0; j
map[i][j]=max;
while(e--)
ok[0]=0;
dian[0].flag =1;//已拿
int top=0;
while(top
find(ok[top]);//更新剩餘點資訊
int min=max;
int p;
for(int i=0; i
if(dian[i].flag ==1)
continue;
if(dian[i].weigh
min=dian[i].weigh ;
p=i;}}
if(top-1)
cout
<
top++;
ok[top]=p;
dian[ok[top]].flag =1;
}return0;}
最小生成樹(prim演算法)
最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...
最小生成樹 Prim演算法
prim 演算法 以領接矩陣儲存 圖g bool b i 表示頂點i是否被訪問,初始化時候memset b,false,sizeof b b 0 value,表示從第0個節點開始。用value i 表示節點i到最小生成樹a中定點的最小距離。例如value 1 a 0 1 int sum記錄權值和 i...
最小生成樹 prim 演算法
一 演算法描述 假設存在連通帶權圖g v,e 其中最小生成樹為t,首先從圖中隨意選擇一點s屬於v作為起始點,並將其標記後加入集合u 中。然後演算法重複執行操作為在所有v屬於u,u屬於v u的邊 v0,u0 屬於e中找一條代價最小的邊並加入集合t,同時將u0併入u,直到u v為止。這是,t中必有n 1...