zoukankan      html  css  js  c++  java
  • poj 2728 Desert King(最优比例生成树)

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstdlib>
    #include <cstring> 
    #include <iomanip>
    using namespace std;
    const int maxn=1005;
    const double eps=1e-6;
    const double inf=0xffffffff;
    struct node{
    	double x,y,h;
    }no[maxn];
    int n;  
    bool visited[maxn];  
     
    double weight[maxn][maxn],c[maxn][maxn],d[maxn][maxn];
    double up,down;
    double dis(node &a,node &b){
    	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    void creattree(int n,double r)
    {
    	for(int i=0;i<n;i++)
    		for(int j=0;j<n;j++)
    		{
    			weight[i][j]=c[i][j]-r*d[i][j];
    		}
    }
    void prime()
    {
    	up=0.0;down=0.0;
    	memset(visited,0,sizeof(visited));
    	int index;
    	int pre[maxn];
    	double dist[maxn]; 
    	visited[1]=1;
    	for(int i=0;i<n;i++)
    	{
    		dist[i]=weight[1][i];
    		pre[i]=1;
    	}
    	for(int i=0;i<n;i++)
    	{
    		double mmimum=inf;
    		for(int j=0;j<n;j++)
    		{
    			if(!visited[j]&&dist[j]<mmimum)
    			{
    				mmimum=dist[j];
    				index=j;
    			}
    		}
    		visited[index]=1;
    		up+=c[pre[index]][index];
    		down+=d[pre[index]][index];
    		for(int i=0;i<n;i++)
    		{
    			if(!visited[i]&&weight[index][i]<dist[i])
    			{
    				dist[i]=weight[index][i];
    				pre[i]=index;
    			}
    		}
    	}
    	
    }
    int main()
    {   
        while(scanf("%d",&n),n)
        {
        	for(int i=0;i<n;i++)
        	{	
    	    	scanf("%lf%lf%lf",&no[i].x,&no[i].y,&no[i].h);
    	    }
    	    for(int i=0;i<n;i++)
    	    	for(int j=0;j<n;j++)
    	    	{
    	    		c[i][j]=fabs(no[i].h-no[j].h);
    	    		d[i][j]=dis(no[i],no[j]);
    	    	}
    	    double r=30.0,ans=30.0;
    		while(1)
    		{
    			creattree(n,r);
    			prime();
    			r=up/down;
    			if(fabs(r-ans)<=eps)break;
    			else ans=r;
    		}	
    		printf("%.3lf
    ",ans);
    		//cout<<fixed<<setprecision(3)<<ans<<endl;
    		
        }
    }
    


  • 相关阅读:
    jenkins与gitlab集成,分支提交代码后自动构建任务(六)
    MySQL配置参数sync_binlog说明
    jenkins部署java项目(五)
    Mac OS X 中安装JDK 7
    centos 使用pip安装mysql-python
    CentOS6.4下安装TeamViewer8
    adb & adb shell 相关命令
    mac下限速
    mac 下 word 2011 使用笔记
    python twisted启动定时服务
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3214885.html
Copyright © 2011-2022 走看看