HDU1162---Eddy's picture

来源:互联网 发布:社区矫正软件 编辑:程序博客网 时间:2024/05/02 20:44

虽然是1A,但是调试了10分钟左右,主要是把定义全局变量n后,又在main里重新定义了一次,导致n值混乱,改过之后把测试注释去掉后直接1A。

#include<stdio.h>#include<string.h>#include<math.h>using namespace std;double map[110][110],dis[110],x[110],y[110];int vis[110],n;#define inf 0xffffffvoid init(){    for(int i=1;i<=n;i++){        for(int j=1;j<=n;j++)        map[i][j]=inf;        x[i]=y[i]=0;        }}double dist(int i,int j){    return sqrt( (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));}void prime(){   double ans=0;    for(int i=1;i<=n;i++)    {        dis[i]=map[1][i];        vis[i]=0;    }    vis[1]=1;    for(int i=1;i<n;i++)    {        double min=inf;        int k;        for(int j=1;j<=n;j++)        {            if(!vis[j]&&min>dis[j])            {                k=j;                min=dis[j];            }        }       // printf("min=%f",min);        vis[k]=1;        ans+=min;      //  printf("ans=%.2f\n",ans);        for(int j=1;j<=n;j++)        {            if(!vis[j]&&dis[j]>map[k][j])                dis[j]=map[k][j];        }    }    printf("%.2f\n",ans);}int main(){    while(scanf("%d",&n)!=EOF)    {   init();        scanf("%lf%lf",&x[1],&y[1]);        for(int i=2;i<=n;i++){                scanf("%lf %lf",&x[i],&y[i]);            for(int j=1;j<i;j++)                {map[i][j]=map[j][i]=dist(i,j);               // printf("%d %d %f\n",i,j,dist(i,j));                }        }        prime();    }}


0 0
原创粉丝点击