zoukankan      html  css  js  c++  java
  • POJ 2560 Freckles Prime问题解决算法

    这个问题正在寻求最小生成树。

    给定节点的坐标,那么我们需要根据各个点之间的这些坐标来计算距离。

    除了这是标准的Prime算法的,能源利用Prime基本上,你可以使用Kruskal。

    经典的算法必须填写,熟练度。否则它是非常困难的利用。

    并且经典的算法之所以为经典。原因之中的一个是没那么easy自己凭空想象出来的,所以要熟练。

    #include <stdio.h>
    #include <string.h>
    #include <queue>
    #include <float.h>
    #include <algorithm>
    #include <math.h>
    using namespace std;
    
    struct Point
    {
    	float x, y;
    };
    const int MAX_N = 101;
    Point P[MAX_N];
    bool vis[MAX_N];
    float dist[MAX_N];
    float minDist[MAX_N];
    
    float calDist(Point &a, Point &b)
    {
    	float x = a.x - b.x;
    	float y = a.y - b.y;
    	return sqrtf(x*x + y*y);
    }
    
    void Prime(int n)
    {
    	memset(vis, 0, sizeof(bool) * (n+1));
    	vis[1] = true;
    	dist[1] = 0;
    	for (int i = 2; i <= n; i++)
    	{
    		dist[i] = calDist(P[1], P[i]);
    	}
    	
    	for (int i = 1; i < n; i++)
    	{
    		float minD = FLT_MAX;
    		int id = 0;
    		for (int j = 2; j <= n; j++)
    		{
    			if (!vis[j] && dist[j] < minD)
    			{
    				minD = dist[j];
    				id = j;
    			}
    		}
    		vis[id] = true;
    		minDist[i] = minD;
    		for (int j = 2; j <= n; j++)
    		{
    			if (!vis[j])
    			{
    				float d = calDist(P[id], P[j]);
    				if (d < dist[j]) dist[j] = d;
    			}
    		}
    	}
    }
    
    int main()
    {
    	int n;
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++)
    	{
    		scanf("%f %f", &P[i].x, &P[i].y);
    	}
    	Prime(n);
    	float ans = 0.f;
    	for (int j = 1; j < n; j++)
    	{
    		ans += minDist[j];
    	}
    	printf("%.2f
    ", ans);
    	return 0;
    }


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    BSON与JSON的区别
    Zookeeper --分布式应用程序协调服务
    Stream Big Data : Storm, Spark and Samza
    Java Virtual Machine
    day1 计算机基础
    畅通工程(kruskal算法)
    The Suspects (并查集)
    The Sum of 0 for four numbers(拆解加二分思想)
    Rebranding(字母代换)
    最长公共子序列和最长公共子串
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4636417.html
Copyright © 2011-2022 走看看