zoukankan      html  css  js  c++  java
  • poj 1553

    题意:求1到2所有路径中最小蛙跳   蛙跳:在一条路径中所有蛙跳中的最大蛙跳

    思路:dijska算法思想

    #include<iostream>
    #include<cmath>
    using namespace std;
    struct Node
    {
    	double x,y;
    }node[222];
    double dist[222];
    int s[222];
    int n;
    int cas;
    double e(Node a,Node b)
    {
    	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    double max(double x,double y)
    {
    	if(x>y) return x;
    	return  y;
    }
    void  Dijsc()
    {
    	int i,j,v;
    	memset(s,0,sizeof(s));
    	for(i=1;i<=n;i++)
    		dist[i]=e(node[1],node[i]);
    	s[1]=1;
    
    	for(i=1;i<=n;i++)
    	{
    		v=-1;
    		double min=999999999;
    		for(j=2;j<=n;j++)
    		{
    			if(dist[j]<min&&!s[j])   //每次选择最小蛙跳 向外扩展  所选择的这个蛙跳肯定是最小的  也就是最优的
    				v=j,min=dist[j];
    		}
    		
    		if(v==-1) break;s[v]=1;
    		for(j=2;j<=n;j++)//通过最小的蛙跳向外扩展
    		{
    			if((dist[j]>dist[v])&&(dist[j]>e(node[v],node[j])))
    				dist[j]=max(dist[v],e(node[v],node[j]));
    		}
    	}
    printf("Scenario #%d
    ",cas);
    printf("Frog Distance = %.3f
    
    ",dist[2]);
    }
    int main()
    {
    
    	int i;
    	cas=0;
    	while(scanf("%d",&n)!=EOF)
    	{
    		if(n==0) break;
    		cas++;
    		for(i=1;i<=n;i++)
    			scanf("%lf%lf",&node[i].x,&node[i].y);
    		Dijsc();
    	}
    	return 0;
    }
    
  • 相关阅读:
    洛谷 P3146 [USACO16OPEN]248
    洛谷 P2633 Count on a tree
    bzoj 1040 1040: [ZJOI2008]骑士
    poj 3417 Network
    洛谷 P2149 [SDOI2009]Elaxia的路线
    2、小文件问题解决
    ☀【组件
    -_-#【JS】隐含全局变量
    -_-#flash播放器自适应
    -_-#【插件】MD5
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3772657.html
Copyright © 2011-2022 走看看