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;
    }
    
  • 相关阅读:
    网络编程_UDP协议_发送端与接收端
    网络编程_IP对象_InetAddress
    Java对XML文件解析方式之一_SAX
    GUI练习3
    GUI_菜单练习
    GUI_文件管理器(练习)
    HTTP数据组织方式
    web前端面试题
    19-字符串匹配(kmp || substr,find)
    17-逆序数(树状数组+离散)
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3772657.html
Copyright © 2011-2022 走看看