zoukankan      html  css  js  c++  java
  • poj 2253

    刚开始没有理解题意,以为是最短路径,后来才发现是prim,哎,无语。。。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    const int maxn=201;
    const double INF=2<<20;
    double x[maxn],y[maxn],edge[maxn][maxn];
    int n;
    double getd(int k,int j)
    {
    	double ex=(x[k]-x[j])*(x[k]-x[j]);
    	double ey=(y[k]-y[j])*(y[k]-y[j]);
    	return sqrt(ex+ey);
    }
    double prim()
    {
    	int i,j;
    	double low[maxn];
    	int path[maxn],vis[maxn];
    	path[1]=0;
    	for(i=1;i<=n;i++)
    	{
    		for(j=1;j<=n;j++)
    			edge[i][j]=getd(i,j);
    	}
    	for(i=1;i<=n;i++)
    	{
    		low[i]=i==1?0:INF;
    		vis[i]=0;
    	}
    	double min;
    	int k;
    	for(i=1;i<=n;i++)
    	{
    		min=INF;
    		for(j=1;j<=n;j++)
    		{
    			if(min>low[j]&&!vis[j])
    			{
    				min=low[j];
    				k=j;
    			}
    		}
    		vis[k]=1;
    		for(j=1;j<=n;j++)
    		{
    			if(low[j]>edge[k][j]&&!vis[j])
    			{
    				low[j]=edge[k][j];
    				path[j]=k;
    			}
    		}
    	}	
    	double max=-1;
    	i=2;
    	while(i)
    	{
    		if(max<edge[path[i]][i])
    			max=edge[path[i]][i];
    		i=path[i];
    	}
    	return max;
    }
    int main()
    {
    	int t=0;
    	while(cin>>n&&n)
    	{
    		t++;
    		for(int i=1;i<=n;i++)
    			cin>>x[i]>>y[i];
    		double ou=prim();
    		printf("Scenario #%d\n",t);
    		printf("Frog Distance = %.3lf\n",ou);
    		printf("\n");
    	}
    	return 0;
    }
    


  • 相关阅读:
    分清函数指针和指针函数_
    常量指针与指针常量的区别
    Oracle11g数据库在Win系统下的安装
    MySQL-python模块
    堡垒机(paramiko)
    paramiko模块
    线程池
    线程、进程和协程
    Twisted
    SocketServer模块
  • 原文地址:https://www.cnblogs.com/lj030/p/3002303.html
Copyright © 2011-2022 走看看