-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathprim.cpp
More file actions
53 lines (50 loc) · 1.21 KB
/
prim.cpp
File metadata and controls
53 lines (50 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<bits/stdc++.h>
#define MAXSIZE 1000
using namespace std;
int adjvex[MAXSIZE],sum=0;
int lowcost[MAXSIZE];
int arcs[MAXSIZE][MAXSIZE],vnum,n,i,j,p;
int mininum();
void prim(){
for(int i=0;i<vnum;i++){
lowcost[i]=arcs[0][i];
adjvex[i]=0;
}
lowcost[0]=0;
for(int i=1;i<vnum;i++){
int k=mininum();
//cout<<"V"<<adjvex[k]+1<<"->V"<<k+1<<endl;
lowcost[k]=0;
for(int j=0;j<vnum;j++){ //¸üи¨ÖúÊý×é
if(lowcost[j]!=0&&arcs[k][j]<lowcost[j]){
lowcost[j]=arcs[k][j];
adjvex[j]=k;
}
}
//for(int i=0;i<vnum;i++) cout<<lowcost[i]<<' ';
}
}
int mininum(){
int mini=1000,k=0;
for(int i=1;i<vnum;i++){
if(lowcost[i]!=0&&lowcost[i]<mini){
mini=lowcost[i];
k=i;
}
}
sum+=mini;
return k;
}
int main()
{
cin>>vnum>>n;
memset(arcs,127,sizeof(arcs));
while(n--){
cin>>i>>j>>p;
arcs[i-1][j-1]=p;arcs[j-1][i-1]=p;
}
//for(int i=0;i<vnum;i++){
//for(int j=0;j<vnum;j++) cout<<arcs[i][j]<<' '; cout<<endl;}
prim();
cout<<sum;
}