zoukankan      html  css  js  c++  java
  • HDU1162和HDU1875

    HDU1162,单纯地求最小生成树。此处用prim算法+邻接阵。

    代码:

    #include<iostream> 
    #include<cmath> 
    using namespace std; 
     
    const int MAXV=105
    const double inf=1000000000
    typedef double elem_t; 
     
    struct point 

        double x,y; 
    }point[MAXV]; 
     
    double map[MAXV][MAXV]; 
    //prim算法 
    elem_t prim(int n) 

        double min[MAXV]; 
        double ret=0
        int v[MAXV],i,j,k; 
        for (i=0;i<n;i++) 
            min[i]=inf,v[i]=0
        for (min[j=0]=0;j<n;j++) 
        { 
            for (k=-1,i=0;i<n;i++) 
                if (!v[i]&&(k==-1||min[i]<min[k])) 
                    k=i; 
            for (v[k]=1,ret+=min[k],i=0;i<n;i++) 
                if (!v[i]&&map[k][i]<min[i]) 
                    min[i]=map[k][i]; 
        } 
        return ret; 

     
    int main(void

        int num,i,j; 
        double length,ans,temp; 
        while(scanf("%d",&num)==1)//节点数 
        { 
            for(i=0;i<MAXV;i++) 
                for(j=0;j<MAXV;j++) 
                    map[i][j]=map[j][i]=inf; 
            for(i=0;i<num;i++) 
                scanf("%lf%lf",&point[i].x,&point[i].y);//输入点的坐标 
            for(i=0;i<num;i++) 
                for(j=0;j<num;j++) 
                { 
                    temp=abs(point[i].x-point[j].x)*abs(point[i].x-point[j].x)+abs(point[i].y-point[j].y)*abs(point[i].y-point[j].y); 
                    length=sqrt(temp); 
                    map[i][j]=map[j][i]=length; 
                } 
            ans=prim(num); 
            printf("%.2lf\n",ans); 
        } 
        return 0

    HDU1875,输入的时候做处理就行,题目要求边不能小于10||边不能大于1000,当边为这么大时,将其处理为inf即可。

    代码:

    #include<iostream> 
    #include<cmath> 
    using namespace std; 
     
    const int MAXV=105
    const double inf=1000000000
    typedef double elem_t; 
     
    struct point 

        double x,y; 
    }point[MAXV]; 
     
    double map[MAXV][MAXV]; 
     
    elem_t prim(int n) 

        double min[MAXV]; 
        double ret=0
        int v[MAXV],i,j,k; 
        for (i=0;i<n;i++) 
            min[i]=inf,v[i]=0
        for (min[j=0]=0;j<n;j++) 
        { 
            for (k=-1,i=0;i<n;i++) 
                if (!v[i]&&(k==-1||min[i]<min[k])) 
                    k=i; 
            for (v[k]=1,ret+=min[k],i=0;i<n;i++) 
                if (!v[i]&&map[k][i]<min[i]) 
                    min[i]=map[k][i]; 
        } 
        return ret; 

     
    int main(void

        int num,i,j,cas; 
        double length,ans,temp; 
        scanf("%d",&cas); 
        while(cas--) 
        { 
            scanf("%d",&num); 
            for(i=0;i<MAXV;i++) 
                for(j=0;j<MAXV;j++) 
                    map[i][j]=map[j][i]=inf; 
            for(i=0;i<num;i++) 
                scanf("%lf%lf",&point[i].x,&point[i].y); 
            for(i=0;i<num;i++) 
                for(j=0;j<num;j++) 
                { 
                    temp=abs(point[i].x-point[j].x)*abs(point[i].x-point[j].x)+abs(point[i].y-point[j].y)*abs(point[i].y-point[j].y); 
                    length=sqrt(temp); 
                    if(10-length>0.00001||length-1000>0.00001
                        map[i][j]=map[j][i]=inf; 
                    else 
                        map[i][j]=map[j][i]=length; 
                } 
            ans=prim(num); 
            if(ans>=inf) 
                printf("oh!\n"); 
            else 
                printf("%.1lf\n",ans*100); 
        } 
        return 0

  • 相关阅读:
    java 反射 报错:Attempt to get java.lang.Integer field "..." with illegal data type conversion to int
    经常报错:Communications link failure
    解析Excel
    spring+atomikos+mybatis 多数据源事务(动态切换)
    mysql 存储过程
    Ace Admin 学习笔记
    spring mvc 表单提交 乱码
    spring 事务
    基于注解的Spring多数据源配置和使用(非事务)
    javaEE版本的eclipse中导入工程,发现server里面找不到工程,根本发布不了也不能运行
  • 原文地址:https://www.cnblogs.com/cchun/p/2520121.html
Copyright © 2011-2022 走看看