poj2560(prim)
日啊,g++一直过不去,c++一次过,这是为什么啊啊啊啊啊啊啊
1 #include <iostream> 2 #include <cmath> 3 #include <stdio.h> 4 using namespace std; 5 6 struct point 7 { 8 double x; 9 double y; 10 }; 11 point a[105]; 12 int visited[105];//是否访问过 13 double len[105][105];//任意两个点之间的长度 14 int n; 15 16 double prim() 17 { 18 double sum=0; 19 double lowcost[105]; 20 int i,j; 21 for(i=0;i<n;i++)//初始化赋值 22 { 23 lowcost[i]=len[0][i]; 24 } 25 visited[0]=1; 26 int pos; 27 for(i=0;i<n-1;i++)//找出0到各个点中路径最短的,把改点加入到集合{0}当中 28 { 29 double min=10000000000.0; 30 for(j=0;j<n;j++) 31 { 32 if(lowcost[j]<min && visited[j]==0) 33 { 34 min=lowcost[j]; 35 pos=j; 36 } 37 } 38 visited[pos]=1; 39 sum=sum+min; 40 for(j=0;j<n;j++)//更新操作,更新新加入的点到其余各点的最短路径 41 { 42 if(visited[j]==0 && len[pos][j]<lowcost[j]) 43 { 44 lowcost[j]=len[pos][j]; 45 } 46 } 47 } 48 return sum; 49 } 50 51 int main() 52 { 53 int i,j; 54 cin>>n; 55 for(i=0;i<n;i++)//输入 56 { 57 cin>>a[i].x>>a[i].y; 58 } 59 for(i=0;i<n;i++)//计算长度 60 { 61 for(j=0;j<n;j++) 62 { 63 len[i][j]=sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)); 64 //cout<<len[i][j]<<endl; 65 } 66 } 67 //cout<<prim()<<endl; 68 printf("%.2lf",prim()); 69 return 0; 70 }