zoukankan      html  css  js  c++  java
  • poj 1679 最小生成树是否唯一

    题意 判断最小生成树是否唯一。

    这里学到了用Prim求次小生成树的做法,倘若最小和次小生成树权值相同,那么就不唯一。

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    
    #define MAX 0xfffffff
    
    const int N = 101;
    
    typedef struct
    {
        int x,y;
    }POINT;
    
    POINT p[N];
    double map[N][N];
    int vis[N];
    int T,C,x,y,i,j;
    
    double get_distance(POINT a,POINT b)
    {
        return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));
    }
    
    void build_map()
    {
        double len;
        for (int t = 0; t < C; t++)
        for (int v = t; v < C; v++)
        {
            len = get_distance(p[t],p[v]);
            if(len>=10 &&len <= 1000)
            map[t][v] = map[v][t] = (t==v)?0:len;
            else map[t][v] = map[v][t] = MAX;
        }
    
    }
    
    void prim()
    {
        int k,t = C;
        double min,sum = 0;
        memset(vis,0,sizeof(vis));
        vis[0]=1;
        while(--t)
        {
            min = MAX;
            for (i = 1; i < C; i++)
            {
                if (vis[i]!=1 && map[0][i] < min)
                {
                    min = map[0][i];
                    k = i;
                }
            }
            if (min==MAX)break;
            vis[k] = 1;
            sum += min;
            for (i = 1; i < C; i++)
            {
                if (vis[i]!=1 && map[k][i] < map[0][i] )
                map[0][i] = map[k][i];
            }
        }
        //printf("%d
    ",t);
        if(t==0)
        {
            printf("%.1f
    ",sum*100);
        }else printf("oh!
    ");
    }
    
    
    int main()
    {
        while(scanf("%d",&T)!= EOF)
        {
            for (int t = 0; t < T; t++)
            {
                scanf("%d",&C);
                for (int c = 0; c < C; c++)
                scanf("%d%d",&p[c].x,&p[c].y);
                build_map();
                prim();
            }
    
        }
        return 0;
    }
  • 相关阅读:
    数字图像处理领域就业前景
    opencv 学习方法
    学习opencv tutorials
    win64+VS2010+OPENCV2.4.9配置问题
    libsvm使用步骤
    生成libSVM的数据格式及使用方法
    一堆应该记住的概念
    static静态变量的理解
    C程第一节课
    扫雷但是不会恭喜
  • 原文地址:https://www.cnblogs.com/wjhstudy/p/10351266.html
Copyright © 2011-2022 走看看