标签:
1 #include<cstdio> 2 #include<cmath> 3 #include<iostream> 4 using namespace std; 5 #define INF 1<<29 6 int n,m,A,B; 7 int x[760],y[760],visit[760],path[760]; 8 int map[760][760],dis[760]; 9 int w(int i,int j) 10 { 11 return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); 12 } 13 void input() 14 { 15 int i,j; 16 int l; 17 scanf("%d",&n); 18 for(i=1;i<=n;i++){ 19 scanf("%d%d",&x[i],&y[i]); 20 for(j=1;j<=i;j++) 21 { 22 l=w(i,j); 23 map[i][j]=map[j][i]=l; 24 } 25 } 26 scanf("%d",&m); 27 for(i=0;i<m;i++) 28 { 29 scanf("%d%d",&A,&B); 30 map[A][B]=map[B][A]=0; 31 } 32 return; 33 } 34 void prim() 35 { 36 int i,j; 37 for(i=1;i<=n;i++) 38 { 39 dis[i]=map[i][1]; 40 path[i]=1; 41 visit[i]=0; 42 } 43 visit[1]=1; 44 for(i=1;i<=n-1;i++) 45 { 46 int temp=INF,k=0; 47 for(j=1;j<=n;j++) 48 { 49 if(!visit[j]&&dis[j]<temp) 50 { 51 temp=dis[j]; 52 k=j; 53 } 54 } 55 visit[k]=1; 56 if(map[path[k]][k]!=0) 57 printf("%d %d\n",k,path[k]); 58 for(j=1;j<=n;j++) 59 { 60 if(!visit[j]&&dis[j]>map[k][j]){ 61 dis[j]=map[k][j]; 62 path[j]=k; 63 } 64 } 65 } 66 } 67 main() 68 { 69 input(); 70 prim(); 71 }
C - Highways
Description
Input
Output
Sample Input
9 1 5 0 0 3 2 4 5 5 1 0 4 5 2 1 2 5 3 3 1 3 9 7 1 2
Sample Output
1 6 3 7 4 9 5 7 8 3
标签:
原文地址:http://www.cnblogs.com/CrazyBaby/p/5444538.html