zoukankan      html  css  js  c++  java
  • POJ3771+Prim

    最小生成树的应用

    数据量小。

    /*
    Prim
    */
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<stack>
    #include<set>
    #include<math.h>
    using namespace std;
    typedef long long int64;
    //typedef __int64 int64;
    typedef pair<int64,int64> PII;
    #define MP(a,b) make_pair((a),(b)) 
    const int maxn = 55;
    const double inf = 99999999;
    const double pi=acos(-1.0);
    const double eps = 1e-8;
    
    struct Node{
    	double x,y;
    }pnt[ maxn ];
    double dis[ maxn ];
    bool vis[ maxn ];
    double mat[ maxn ][ maxn ];
    double dist( int a,int b ){
    	return sqrt( (pnt[a].x-pnt[b].x)*(pnt[a].x-pnt[b].x)+(pnt[a].y-pnt[b].y)*(pnt[a].y-pnt[b].y) );
    }
    
    double Prim( int start,int aim,int n ){
    	double ans = 0;
    	memset( vis,false,sizeof( vis ) );
    	vis[ start ] = true;
    	vis[ aim ] = true;
    	for( int i=0;i<n;i++ ){
    		dis[ i ] = mat[ start ][ i ];
    	}
    	for( int i=0;i<n;i++ ){
    		int id = -1;
    		double M = inf;
    		for( int j=0;j<n;j++ ){
    			if( vis[ j ]==false&&M>dis[ j ] ){
    				M = dis[ j ];
    				id = j;
    			}
    		}
    		if( id==-1 ) break;
    		vis[ id ] = true;
    		ans += M;
    		for( int j=0;j<n;j++ ){
    			if( vis[ j ]==false&&dis[ j ]>mat[ id ][ j ] ){
    				dis[ j ] = mat[ id ][ j ];
    			}
    		}
    	}
    	return ans ;
    }	
    
    int main(){
    	int T;
    	scanf("%d",&T);
    	while( T-- ){
    		int n;
    		scanf("%d",&n);
    		for( int i=0;i<n;i++ ){
    			scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
    		}
    		if( n==1 ){
    			puts("0");
    			continue;
    		}
    		for( int i=0;i<n;i++ ){
    			for( int j=0;j<n;j++ ){
    				if( i==j )
    					mat[i][j] = 0.0;
    				else
    					mat[i][j] = dist( i,j );
    			}
    		}
    		double res = inf; 
    		for( int i=0;i<n;i++ ){
    			res = min( res,Prim( (i+1)%n,i,n ) );
    		}
    		printf("%.2lf
    ",res);
    	}
    	return 0;
    }
    


     

  • 相关阅读:
    -_-#【MongoDB】日期类型
    -_-#【Better Code】字符串匹配
    -_-#【Canvas】圆弧运动
    -_-#【Canvas】
    -_-#【AngularJS】
    COGS——C 14. [网络流24题] 搭配飞行员
    CODEVS——T 1993 草地排水 USACO
    BZOJ——T2190: [SDOI2008]仪仗队
    Codeforces_GYM_100741 A
    2017-0722 模拟赛
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3315504.html
Copyright © 2011-2022 走看看