标签:
Description
Input
Output
Sample Input
3 0 990 692 990 0 179 692 179 0 1 1 2
Sample Output
179
当路已经修建了的时候,把他们之间的权值置为最小值0,就不会影响结果了;
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 const int N=110; 6 const int inf=1<<29; 7 int w[N][N],n,flag[N],dis[N]; 8 int prim() 9 { 10 int sum=0; 11 memset(flag,0,sizeof(flag)); 12 for(int i=1; i<=n; i++) 13 { 14 dis[i]=w[1][i]; 15 } 16 flag[1]=1; 17 for(int i=1; i<n; i++) 18 { 19 int to=-1,min1=inf; 20 for(int j=1; j<=n; j++) 21 { 22 if(!flag[j]&&dis[j]<min1) 23 { 24 to=j; 25 min1=dis[j]; 26 } 27 } 28 if(to==-1) return -1; 29 sum+=min1; 30 flag[to]=1; 31 for(int i=1; i<=n; i++) 32 { 33 dis[i]=min(dis[i],w[to][i]); 34 } 35 } 36 return sum; 37 } 38 int main() 39 { 40 41 while(scanf("%d",&n)!=EOF&&n) 42 { 43 for(int i=1; i<=n; i++) 44 { 45 for(int j=1; j<=n; j++) 46 { 47 scanf("%d",&w[i][j]); 48 } 49 } 50 int m,u,v; 51 scanf("%d",&m); 52 for(int i=1; i<=m; i++) 53 { 54 scanf("%d%d",&u,&v); 55 w[u][v]=0; 56 w[v][u]=0; 57 } 58 printf("%d\n",prim()); 59 } 60 return 0; 61 }
标签:
原文地址:http://www.cnblogs.com/tianmin123/p/4769244.html