题目很简单,我却WA了几十次,找错误找了我一个小时;
蛋都碎了!
后来发现错误的地方竟然是memset;
用一个循环来替代它就A了;╮(╯▽╰)╭
今晚回去好好的看看memset!!!
发个代码纪念下,已经被我改的面目全非;
1 #include<cstdio> 2 #include<cmath> 3 #define maxn 105 4 using namespace std; 5 double map[maxn][maxn]; 6 int x[maxn],y[maxn]; 7 bool v[maxn]; 8 9 double prim(int n) 10 { 11 int i,j,flag; 12 v[1]=1; 13 double sum=0.0,lowcase[maxn]; 14 for(i=2; i<=n; i++) 15 { 16 lowcase[i]=map[1][i]; 17 v[i]=0; 18 } 19 for(i=1; i<n; i++) 20 { 21 flag=1; 22 double min=20000.0; 23 for(j=1; j<=n; j++) 24 if(!v[j]&&min>lowcase[j]) 25 { 26 min=lowcase[j]; 27 flag=j; 28 } 29 if(min>2000) return -20.0; 30 v[flag]=1; 31 sum+=min; 32 for(j=1; j<=n; j++) 33 if(!v[j]&&lowcase[j]>map[flag][j]) 34 lowcase[j]=map[flag][j]; 35 } 36 return sum; 37 } 38 39 int main() 40 { 41 int n,m,t,i,flag,j; 42 double z; 43 scanf("%d",&t); 44 while(t--) 45 { 46 scanf("%d",&n); 47 for(i=1; i<=n; i++) 48 for(j=1; j<=n; j++) 49 map[i][j]=20000.0; 50 for(i=1; i<=n; i++) 51 scanf("%d%d",&x[i],&y[i]); 52 for(i=1; i<n; i++) 53 for(j=i+1; j<=n; j++) 54 { 55 z=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); 56 if(z>=10.00&&z<=1000.00) 57 map[i][j]=map[j][i]=z; 58 } 59 double sum=prim(n); 60 if(sum<0)printf("oh! "); 61 else printf("%.1lf ",sum*100); 62 } 63 return 0; 64 }