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 }

posted on 2012-08-04 11:25  矮人狙击手!  阅读(229)  评论(0编辑  收藏  举报

导航