hdu 1245 Saving James Bond

简介: 点击打开链接hdu 1245 思路:最短路+floyd 分析: 1 题目讲的是有一个湖100x100这个人刚开始在一个直径为15的圆心在原点的园内,然后要通过跳跃的方式问我们他是否能够到达岸边。

点击打开链接hdu 1245


思路:最短路+floyd

分析:
1 题目讲的是有一个湖100x100这个人刚开始在一个直径为15的圆心在原点的园内,然后要通过跳跃的方式问我们他是否能够到达岸边。如果可以求出最短的路径和步数
2  很明确就是最短路问题。但是这个时候问题来了,起点和终点是在哪里,所以我们采用的是将原点作为起点,岸边做为终点。知道了起点和终点,我们就可以求最短路,但是这个时候会碰到另外一个问题,边的长度。对于这个问题,我们是采取的方法是将这些点分成三类。1类:起点  2类:终点  3类:其它点 ,那么我们就可以分别对这三类的点求出它和其它点的距离。

注意事项:
1 输入的数据中,点的范围可能会在园内或在湖外,所以在输入的时候要判断点是否合法。
2 这一题精度要求很严格,一些比较之类的要注意精度问题
3 注意n = 0 的情况,这里如果n = 0,但是d > 42.5 是可以跳出去的。但是只要有乌龟,这个人就必须通过踩在乌龟上面跳出去,所以n = 0是比较特殊的。
4  n不大所以什么方法都可以做
5 求所需几步的时候利用一个setp[][]数组,首先初始户为0然后将可以到达的点标记为1,最后只要在更新dis[][]的时候更新即可。


代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define MAXN 110
#define INF 0xFFFFFFF
#define eps 1e-12

int n;
double d;
double dis[MAXN][MAXN];
int setp[MAXN][MAXN];
struct Point{
   int x;
   int y;
}p[MAXN];

/*初始话边*/
void init(){
   memset(setp , 0 , sizeof(setp));/*初始话为0*/
   /*第三类的点*/
   for(int i = 2 ; i < n ; i++){
      for(int j = 2 ; j < n ; j++){
         double tmp_x = (p[i].x-p[j].x)*(p[i].x-p[j].x);
         double tmp_y = (p[i].y-p[j].y)*(p[i].y-p[j].y);
         double tmp = sqrt(tmp_x + tmp_y);
         if(tmp-d <= eps){
            dis[i][j] = tmp;
            setp[i][j] = 1;
         }
         else
            dis[i][j] = INF;
      }
      dis[i][i] = 0;
   }
   /*第一类点*/
   dis[1][1] = 0;
   dis[1][n] = dis[n][1] = INF;
   for(int i = 2 ; i < n ; i++){
      double tmp = sqrt((p[i].x)*(p[i].x)*1.0+(p[i].y)*(p[i].y)*1.0);
      if(tmp-7.5-d <= eps){/*注意要减去7.5*/
        dis[1][i] = dis[i][1] = tmp-7.5;
        setp[1][i] = setp[i][1] = 1;
      }
      else
        dis[1][i] = dis[i][1] = INF;
   }
   /*第二类点*/
   dis[n][n] = 0;
   for(int i = 2 ; i < n ; i++){
      int a = 50-abs(p[i].x);
      int b = 50-abs(p[i].y);
      int min = a < b ? a : b;
      if(min-d <= eps){
        dis[i][n] = dis[n][i] = min;
        setp[i][n] = setp[n][i] = 1;
      }
      else
        dis[i][n] = dis[n][i] = INF;
   }
}

/*floyd算法*/
void floyd(){
   for(int k = 1 ; k <= n ; k++){
      for(int i = 1 ; i <= n ; i++){
         for(int j = 1 ; j <= n ; j++){
            if(dis[i][j]-(dis[i][k]+dis[k][j]) >= eps){
              dis[i][j] = dis[i][k]+dis[k][j];
              setp[i][j] = setp[i][k] + setp[k][j];/*更新数组*/
            }
         }
      }
   }
}

int main(){
   int a , b , j;
   while(scanf("%d %lf" , &n , &d) != EOF){
       j = 2;/*默认1为起点,j从2开始*/
       for(int i = 0 ; i < n ; i++){
          scanf("%d%d" , &a , &b);
          if(abs(a) < 8 && abs(b) < 8 || abs(a) > 50 && abs(b) > 50)/*如果不合法就跳过*/
            continue;
          p[j].x = a;
          p[j++].y = b;
       }
       n = j;
       if(!n){/*判断n是否为0*/
          if(d-42.5 >= eps)
            printf("42.50 1\n");
          else
            printf("can't be saved\n");
          continue;
       }
       init();
       floyd();
       if(dis[1][n] != INF)/*是否可以跳出去*/
         printf("%0.2lf %d\n" , dis[1][n] , setp[1][n]);
       else
         printf("can't be saved\n");
   }
   return 0;
}



目录
相关文章
|
程序员 Shell 数据格式
python股票量化交易(1)---K线图、均线与成交量绘制
python股票量化交易(1)---K线图、均线与成交量绘制
2510 0
python股票量化交易(1)---K线图、均线与成交量绘制
|
8月前
|
人工智能 监控 前端开发
主流多智能体框架设计原理
本文描述了关于智能体(Agents)和多智能体系统(Multi-Agent Systems, MAS)的详尽介绍,涵盖了从定义、分类到具体实现框架的多个方面。
主流多智能体框架设计原理
|
SQL 安全 Java
SQL注入攻防:保护你的数据库免受黑客攻击
【8月更文挑战第31天】面对日益复杂的网络攻击,数据库安全至关重要。SQL注入作为黑客常用手法,通过植入恶意代码非法访问数据库,严重威胁信息安全。本文详解SQL注入原理及其防御策略,涵盖不当输入处理导致的漏洞利用,以及通过预编译查询和权限限制等手段加强防护。使用如Java的PreparedStatement可有效避免SQL注入,保障数据安全。共同构建安全网络,抵御SQL注入风险。
500 0
|
9月前
|
JSON 搜索推荐 API
淘宝拍立淘按图搜索商品API接口示例说明
淘宝拍立淘按图搜索商品API接口是淘宝开放平台提供的一项基于图像识别技术的搜索服务,允许用户通过上传图片来快速找到相似的商品。以下是对该API接口的示例说明:
|
11月前
|
数据可视化 安全 数据挖掘
CRM解决方案的创新力量:销售易、白码、八百客品牌功能深度剖析
在数字化转型浪潮中,CRM系统成为企业提升销售效率、优化客户体验的重要工具。本文深入介绍销售易旗下的白码和八百客品牌及其产品功能。 **销售易**:中国领先的CRM解决方案提供商,提供智能化、移动化的销售管理工具,实现销售流程自动化和数字化转型。 **白码**:低代码开发平台,允许非技术人员通过图形化界面快速构建企业应用,如CRM、ERP等,降低数字化门槛。 **八百客**:专注于中小企业的在线CRM产品,具备易部署、易维护、易扩展的特点,助力企业快速实现客户管理的数字化,提升销售和服务质量。 三者各具优势,全面满足企业CRM需求。
|
机器学习/深度学习 人工智能 自然语言处理
如何测试一个 AI 系统?
目前智能系统主要是对 AI 应用最为广泛的四个领域是自然语言处理、图像识别、推荐系统、机器学习这四个方面。每个智能系统都包含了一个及其以上的 AI 模型,那么支撑 AI 模型对外提供服务还需要很多传统组件,例如数据库、Web 容器、交互界面等等。所以非智能系统可能出现的缺陷,在智能系统中都有可能存在,因此我们常规的测试方法、技术、实践还都是适用的。除此之外智能系统与非智能系统相比还有一些其特殊性,所以专门针对智能系统的测试策略、方法和实践也是需要深入研究和探讨的
1041 0
如何测试一个 AI 系统?
|
算法 网络虚拟化 C语言
【Cisco Packet Tracer】交换机划分Vlan实验
文章目录 一、前期准备 二、实验要求 三、搭建局域网 四、配置pc端的ip 五、配置VLAN 六、设置端口模式trunk 七、PING检验是否通路
|
数据安全/隐私保护 Python
图像的加密和解密---OpenCV-Python开发指南(5)
图像的加密和解密---OpenCV-Python开发指南(5)
486 0
图像的加密和解密---OpenCV-Python开发指南(5)
|
传感器
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
1051 0
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
|
运维 负载均衡 安全
阿里云混合云开放网络生态的探索与实践
2022年F5多云应用服务科技峰会于4月正式召开。阿里云智能混合云平台高级网络架构师张然(然犀)应邀于合作伙伴生态专场分享了阿里云混合云在开放网络生态领域的探索与实践。
2377 1
阿里云混合云开放网络生态的探索与实践