码迷,mamicode.com
首页 > 其他好文 > 详细

弗洛伊德思想题目

时间:2019-04-09 21:03:37      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:def   void   min   标记   main   frog   ble   printf   bre   

湖中有n块石头,编号从1到n,有两只青蛙,Bob在1号石头上,Alice在2号石头上,Bob想去看望Alice,但由于水很脏,他想避免游泳,于是跳着去找她。但是Alice的石头超出了他的跳跃范围。因此,Bob使用其他石头作为中间站,通过一系列的小跳跃到达她。两块石头之间的青蛙距离被定义为两块石头之间所有可能路径上的最小必要跳跃距离,某条路径的必要跳跃距离即这条路径中单次跳跃的最远跳跃距离。你的工作是计算Alice和Bob石头之间的青蛙距离。

Input

多实例输入
先输入一个整数n表示石头数量,当n等于0时结束。
接下来2-n+1行依次给出编号为1到n的石头的坐标xi , yi。
2 <= n <= 200
0 <= xi , yi <= 1000

Output

先输出"Scenario #x", x代表样例序号。
接下来一行输出"Frog Distance = y", y代表你得到的答案。
每个样例后输出一个空行。
(ps:wa有可能是精度问题,g++不对可以用c++尝试,都不对就是代码问题)

Sample Input

2
0 0
3 4

3
17 4
19 4
18 5

0

Sample OutputScenario #1

Frog Distance = 5.000

Scenario #2
Frog Distance = 1.414




题解:
该题所给相当于石头坐标,求两点间的距离,即求出三角形的最长边,然后在这些边中求最短路;
//因为是坐标,两点间距离为三角形最长边,求出所有最长边的最小值 
#include <iostream>
#include <cstdio>
#include <cstring>
#define inf 1e18
#include<algorithm>
#include<cmath>
using namespace std ;
int n;
int w[250][250],dis[250];  //w数组记录i-j的距离 ,dis数组记录并更新 
bool vis[250];   //标记作用, 

struct node 
{ 
  int x;
  int y;
}p[250];

double dist(node a,node b)
{
    return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}

void dijkstra()  //核心代码
{
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
       dis[i]=w[1][i]; //初始化dis数组,1到各个顶点的距离
    for(int i=1;i<=n;i++)
    {
        int u,m=inf;
        for(int j=1;j<=n;j++)
         if(!vis[j]&&dis[j]<=m)
            m=dis[u=j];
        vis[u]=1;
        for(int j=1;j<=n;j++)
       {
          int k=max(dis[u],w[u][j]);
          dis[j]=min(k,dis[j]);
       } 
    }
} 
int main()
{
    int q=1;
    while(cin>>n)
    {
        if(n==0)break;
        for(int i=1;i<=n;i++)
           cin>>p[i].x>>p[i].y;
        for(int i=1;i<=n;i++)
           for(int j=1;j<=n;j++)
            w[i][j]=dist(p[i],p[j]);
        dijkstra();
        cout<<"Scenario #"<<q++<<endl;
        cout<<"Frog Distance = ";
        printf("%.3f\n\n",sqrt(dis[2]));
    } 
    return 0;
}

 

弗洛伊德思想题目

标签:def   void   min   标记   main   frog   ble   printf   bre   

原文地址:https://www.cnblogs.com/ylrwj/p/10679295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!