`
xxx0624
  • 浏览: 30816 次
文章分类
社区版块
存档分类
最新评论

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\n",res);
	}
	return 0;
}


分享到:
评论

相关推荐

    POJ3026-Borg Maze【BFS+Prim】

    《POJ3026-Borg Maze:BFS与Prim算法的应用解析》 在计算机科学领域,图论是解决问题的重要工具之一,而BFS(广度优先搜索)和Prim算法则是其中的两种经典算法。本篇文章将围绕北大POJ3026题目“Borg Maze”来探讨...

    POJ2485-Highways【Prim】

    标题中的"POJ2485-Highways【Prim】"指的是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problemset Online Judge)。这个题目要求使用Prim算法来解决,Prim算法是一种在图论中寻找最小生成树的经典算法。 ...

    POJ1789-Truck History【Prim】

    【标题】"POJ1789-Truck History【Prim】"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。这个题目要求参赛者利用Prim算法来解决一个具体的问题。 【描述】"北大POJ1789-Truck ...

    POJ2031-Building a Space Station【Prim+计算几何】

    【标题】"POJ2031-Building a Space Station【Prim+计算几何】"是一道编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目结合了图论中的Prim算法与计算几何领域的知识,挑战参赛者的算法...

    POJ1258-Agri-Net【Prim】

    【标题】"POJ1258-Agri-Net【Prim】" 是一个编程竞赛题目,来源于北京大学的在线评测系统POJ(Problem Online Judge)。这个题目主要涉及到图论中的一个重要算法——普里姆(Prim)算法。 【描述】"北大POJ1258-...

    POJ 1751 求最小生成树prim算法(JAVA)

    标题 "POJ 1751 求最小生成树Prim算法(JAVA)" 提到的是一个编程挑战,涉及图论中的经典算法——Prim算法。在计算机科学中,Prim算法是用于寻找加权无向图的最小生成树的一种有效方法。最小生成树是一棵树形结构,...

    POJ 1789 最小生成树之prim算法

    标题中的“POJ 1789 最小生成树之prim算法”指的是一个在线编程竞赛题目,来源于普林斯顿开放在线课程(POJ)平台。该题目要求参赛者实现Prim算法,这是一种解决图论问题中寻找最小生成树的经典算法。最小生成树是在...

    poj题目分类

    * 最小生成树算法:例如 Prim、Kruskal,例如 poj1789、poj2485、poj1258、poj3026。 * 拓扑排序:例如 poj1094。 * 二分图的最大匹配:例如 poj3041、poj3020。 * 最大流的增广路算法:例如 poj1459、poj3436。...

    POJ算法题目分类

    * 最小生成树算法:最小生成树算法是指计算图的最小生成树的算法,如 prim、kruskal。 * 拓扑排序:拓扑排序是指计算图的拓扑排序的算法,如 poj1094。 * 二分图的最大匹配:二分图的最大匹配是指计算二分图的最大...

    poj训练计划.doc

    - 最小生成树算法:如Prim算法和Kruskal算法,用于找出图中的最小生成树,如`poj1789, poj2485`。 - 拓扑排序:适用于有向无环图,用于确定任务的执行顺序,如`poj1094`。 - 二分图的最大匹配:如匈牙利算法,...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **解释**:最小生成树算法主要包括Prim算法和Kruskal算法。 ##### (4) 拓扑排序 - **例题**:poj1094 - **解释**:拓扑排序是对有向无环图的一种排序方式,可以用来解决依赖关系的问题。 ##### (5) 匹配算法 - *...

    poj各种分类

    Prim算法和Kruskal算法分别基于贪心策略和并查集数据结构,用于在带权图中找到连接所有顶点的最小总权重的树结构。 #### 拓扑排序 适用于有向无环图,帮助分析任务依赖关系,如poj1094所示。 #### 匹配算法 包括...

    经典 的POJ 分类

    - POJ 1789、POJ 2485:Prim算法的具体应用。 - POJ 1258、POJ 3026:Kruskal算法的实际案例。 #### 字符串处理 - **题目示例**: - POJ 3349、POJ 3274:字符串匹配及Hash应用。 - POJ 2151、POJ 1840:利用...

    POJ题目简单分类(ACM)

    - **最小生成树算法**:prim和kruskal算法,如poj1789,用于找到图的最小成本连接。 - **拓扑排序**:对有向无环图的排序,如poj1094。 - **二分图最大匹配**:匈牙利算法,如poj3041和poj3020,解决分配问题。 ...

    acm训练计划(poj的题)

    - (poj1789, poj2485, poj1258, poj3026):介绍普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal),用于寻找加权无向图的最小生成树。 4. **拓扑排序**: - (poj1094):适用于有向无环图(DAG)的一种排序方式,...

    poj 2485 Highways 测试数据

    【poj 2485 Highways 测试数据】是一个编程竞赛题目,源自著名的在线算法竞赛平台POJ(Programming Online Judge)。此题目的主要目的是通过解决实际问题来考察参赛者的图论和算法设计能力,特别是涉及到最小生成树...

    POJ第1861题源码POJ第1861题源码POJ第1861题源码POJ第1861题源码

    对于POJ第1861题,参赛者可能需要读取输入数据,构建一个加权图,然后应用Prim或Kruskal算法找出最小生成树,最后输出树中边的权重总和或者某种特定格式的树结构。解题过程可能涉及到错误处理、边界条件检查以及效率...

    Poj中的一些题目源代码

    在编程竞赛中,POJ(Problemset Online Judge)是一个知名的在线判题系统,用于检验和提交程序解决问题的能力,而OI(OnlineJudge)是这类系统的统称。下面将对每个文件名中的题目和相关算法进行详细解释。 1. **P...

    POJ 分类题目 txt文件

    从给定的文件信息来看,这是一份关于POJ(Pat Online Judge)平台上的编程题目的分类汇总。POJ是北京大学设立的一个在线编程评测系统,提供了大量的编程题目供学习者练习,涵盖了各种算法和数据结构知识。下面将对这...

    poj的一些题目的代码

    例如,通过分析“最小生成树”的代码,可以学习Prim或Kruskal算法;查看“最长公共子序列”的代码,可以了解动态规划的应用;研究“二分查找”的实现,可以掌握二分法的精髓。此外,这些代码通常会遵循一定的编码...

Global site tag (gtag.js) - Google Analytics