• poj 2253 Frogger (最短路Floyd)


    点击打开链接

    wrong了2次,因为没读懂题!!

    唉, 英语好差啊!!

    题目大意:

    给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。题目要求,必须借助第三块石头!!求出最短总路径中的最大权值

    现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。

    #include"stdio.h"
    #include"math.h"
    #define INF 99999999
    double map[201][201];
    int main()
    {
    	int	n,i,j,k,cnt;
    	int x[201],y[201];
    	double t;
    	cnt=0;
    	while(scanf("%d",&n)!=-1&&n)
    	{
    		for(i=0;i<n;i++)
    			scanf("%d%d",&x[i],&y[i]);
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<n;j++)
    				map[i][j]=(i==j?0:INF);
    		}
    		for(i=0;i<n;i++)
    		{
    			for(j=i+1;j<n;j++)
    				map[i][j]=map[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
    		}
    		for(k=0;k<n;k++)
    		{
    			for(i=0;i<n-1;i++)
    				for(j=i+1;j<n;j++)
    				{
    					if(map[i][k]<map[i][j]&&map[k][j]<map[i][j])//当ik,kj都小于ij时,才可能借助第三块石头走过
    						if(map[i][k]<map[k][j])//求出最短总路径中的最大权值!
    							map[i][j]=map[j][i]=map[k][j];
    						else
    							map[i][j]=map[j][i]=map[i][k];
    				}
    		}
    		cnt++;
    		printf("Scenario #%d\n",cnt);
    		printf("Frog Distance = %.3f\n\n",map[0][1]);
    	}
    	return 0;
    }
    
    		
    



  • 相关阅读:
    wavecom短信猫发送短信失败
    中美教育之差异
    Linux系统管理员成长经验:十一大工作心得
    帮忙哈
    用linux命令分析文件-排序-统计(sort, uniq, awk)
    【u202】家庭作业
    【u107】数字游戏(bds)
    【u104】组合数
    【u105】路径计数2
    【u022】车的放置
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365299.html
Copyright © 2020-2023  润新知