浙大数据结构慕课课后题(06-图2 Saving James Bond - Easy Version)(拯救007)

题目要求:

This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the world's most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with crocodiles. There he performed the most daring action to escape -- he jumped onto the head of the nearest crocodile! Before the animal realized what was happening, James jumped again onto the next big head... Finally he reached the bank before the last crocodile could bite him (actually the stunt man was caught by the big mouth and barely escaped with his extra thick boot).

Assume that the lake is a 100 by 100 square one. Assume that the center of the lake is at (0,0) and the northeast corner at (50,50). The central island is a disk centered at (0,0) with the diameter of 15. A number of crocodiles are in the lake at various positions. Given the coordinates of each crocodile and the distance that James could jump, you must tell him whether or not he can escape.

输入格式: 

Each input file contains one test case. Each case starts with a line containing two positive integers N (≤100), the number of crocodiles, and D, the maximum distance that James could jump. Then N lines follow, each containing the (x,y) location of a crocodile. Note that no two crocodiles are staying at the same position. 

输出格式: 

For each test case, print in a line "Yes" if James can escape, or "No" if not. 

样例输入: 

14 20
25 -15
-25 28
8 49
29 15
-35 -2
5 28
27 -29
-8 -28
-20 -35
-25 -20
-13 29
-30 15
-35 40
12 12 

样例输出: 

Yes 

翻译:

题解: 

        思路如注释所示,可通过所有测试点。

#include<bits/stdc++.h>
using namespace std;const int MAX_N = 100;
const int LAKE_R = 50;
const double ISLAND_R = 7.5;  vector<pair<int,int>> cro;  //这里先不固定cro的存储大小,用来节约存储空间与动态调整数组大小 
bool vis[MAX_N];double dis(int x1, int y1, int x2, int y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
} bool canbestart(int x, int y,int D){      //是否能作为DFS搜索的起始点,也就是能从岛屿跳到的第一条鳄鱼 return dis(0, 0, x, y)-ISLAND_R <= D;
}bool success(int x, int y, int D){        //是否能成功跳到岸边 return (abs(x)+D>=LAKE_R)||(abs(y)+D>=LAKE_R);
}bool DFS(int index, int D){vis[index] = true;int x = cro[index].first;int y = cro[index].second;if(success(x, y, D)) return true;for(int i=0; i < cro.size(); i++){if(!vis[i] && dis(x, y, cro[i].first, cro[i].second) <= D){   //如果遍历的点没有搜索过,且从上一个点可以跳到这个点,则加入路线中 if(DFS(i,D)){return true;		}}}return false;
}int main(){int N,D;cin>>N>>D;cro.resize(N);         //把动态数组的大小置为N    fill(vis,vis + N,false);    //把vis的值初始化为0 for(int i=0; i < N; i++){cin>>cro[i].first>>cro[i].second;}//从每个能从湖心岛跳跃到达的鳄鱼开始遍历for(int i=0; i < N; i++){if(!vis[i] && canbestart(cro[i].first,cro[i].second,D)){if(DFS(i,D)){cout<<"Yes"<<"\n";return 0;		}}}	cout<<"No"<<"\n"; 
} 

总结: 

        1.用pair型数据存储一个坐标点,因为它可以包含两个元素。 

        2.每次开始DFS搜索时,注意先看起始点是否已经被其他路径包含过,我第一次做时单纯遍历了每一个能跳到的起始点,上交时出现段错误,后来查阅资料发现这种情况可能会使DFS递归困在一个环形结构中,导致一直申请空间,从而爆栈,这是不对的。

        3.这个题包含了一些数学几何方面的知识,在找第一个起始点时,把起始点与湖心岛圆心的距离与D比较,其实就是圆外一点到圆周上距离的计算。(图上这种情况是可以作为起始点的)

 

        4.判断是否能上岸边,这里我用的方法是看已到达的坐标点的横纵坐标加D是否超过了整个湖的半径。(图上这种情况是上不了岸的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/399393.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW中CANopen 读取程序解读

这段程序用于创建 CANopen 接口&#xff0c;并读取 CANopen CAN 帧消息。以下是详细的解读&#xff1a; 左侧部分 node-ID (U8): 指定节点 ID&#xff0c;用于标识 CANopen 网络中的设备。CANopen interface (U32): 指定 CANopen 接口。baud rate (U32): 设置波特率&#xff0…

vulnhub系列:sp eric

vulnhub系列&#xff1a;sp eric 靶机下载 一、信息收集 nmap扫描存活&#xff0c;根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录&#xff0c;.git 源码&#xff0c;admin…

向上or向下调整建堆 的时间复杂度的本质区别的讲解

知识点&#xff1a;&#xff08;N代表节点数&#xff0c;h代表高度&#xff09; 1&#xff1a;高度为h的满二叉树节点个数N为 2^&#xff08;h&#xff09;-1 即N 2^&#xff08;h&#xff09;-1 2&#xff1a;所以h log&#xff08;N1&#xff09; 一&#xff1a;向上…

C++STL详解(四)——vector类的具体实现

在上篇文章中&#xff0c;我们已经学习了vector的具体接口使用方法&#xff0c;在本篇文章中&#xff0c;我们将学习实现一个vector容器。 目录 一.vector各函数接口总览 二.vector当中的私有成员 三.默认成员函数 3.1构造函数 3.1.1构造函数1 3.1.2构造函数2 3.1.3构造…

百数移动端重大更新:全面优化,用户体验再升级!

本次发布的优化更新的功能&#xff0c;主要是为了提升用户的移动端使用体验。此次改版不仅优化了控件样式&#xff0c;提升视觉与交互体验&#xff0c;还在子表单功能上实现了重大突破&#xff0c;如新增复制、插入行功能等。 同时&#xff0c;新增功能——数据加载&#xff0…

Python之简单了解pylab绘图工具和汇编语言

《Python入门经典以解决计算问题为导向的Python编程实践》89-93页的笔记。 用pylab对数据绘图最小的通用计算 用pylab对数据绘图 PyLab是Matplotlib面向对象绘图库的过程界面。Matplotlib是整个软件包&#xff1b; matplotlib.pyplot是Matplotlib中的一个模块&#xff1b;而P…

【物联网】(蓝牙篇)微信小程序ios如何自动打开蓝牙

微信小程序打开蓝牙的便捷之道——微信小程序ios如何自动打开蓝牙 随着智能手机蓝牙技术和物联网产品的普及&#xff0c;很多人在使用微信小程序时&#xff0c;都希望能够更便捷地打开蓝牙功能。 在iOS系统上&#xff0c;由于其封闭性和权限控制严格&#xff0c;使得自动打开蓝…

扩散模型理论与公式推导——详细过程速览与理解加深

参考&#xff1a; [1] Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. [2] 扩散模型/Diffusion Model原理讲解_哔哩哔哩_bilibili [3] 扩散模型公式推导_扩散模型数学推导-C…

10、java程序流程控制之二:分支语句(switch-case结构)、循环结构(for循环)(经典案例)

java程序流程控制之二&#xff1a; Ⅰ、分支语句&#xff1a;switch-case1、switch-case 分支结构&#xff1a;其一、描述&#xff1a;其二、代码为&#xff1a;其三、截图为&#xff1a; 2、switch-case 分支结构的案例1&#xff1a;判断是否合格其一、描述&#xff1a;其二、…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷&#xff08;data volume&#xff09;数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

“南禾”女士包网站的设计与实现----附源码17160

摘 要 随着社会经济的发展和人们生活水平的提高&#xff0c;女士包市场逐渐成为一个庞大的产业。女性消费者对于时尚、品质和个性化的追求&#xff0c;对于高品质、款式新颖的女士包需求不断增加。南禾作为中高端女士包品牌&#xff0c;为抓住了这一市场需求&#xff0c;为女性…

再见,Midjourney | FLUX 彻底改变了 AI 图像游戏

Flux 刚发布一周&#xff0c;大家都疯了&#xff01; 因为真的是分不清是AI还是真实啊&#x1f3f4;‍☠️ Flux生成 Flux生成 FLUX 彻底改变了 AI 图像游戏。 02 黑深林 Black Forest Labs由Stable Diffusion模型的原班人马创立&#xff0c;旨在开发并开源高质量的图像和…

AI技术加速落地 港科广联手思谋打开智能缺陷检测新纪元

AI 技术应用落地的元年&#xff0c;工业是主战场&#xff0c;尤其是工业缺陷检测。 在“生产制造-缺陷检测-工艺优化-生产制造”的智能制造闭环链条中&#xff0c;基于AI的智能缺陷检测扮演着“把关者”的角色。但这个把关者长期以来却缺少一个称手的工具——样本量大、精度高…

【Cadence22】将别人发的原理图和PCB库修改为自己的库,进而继续制图

【转载】Cadence Design Entry HDL 使用教程 【Cadence01】Cadence PCB Edit相对延迟与绝对延迟的显示问题 【Cadence02】Allegro引脚焊盘Pin设置为透明 【Cadence03】cadence不小心删掉钢网层怎么办&#xff1f; 【Cadence04】一般情况下Allegro PCB设计时的约束规则设置&a…

Firefox滚动条在Win10和Win11下表现不一致问题?

文章目录 前言总结解决方法 前言 最近在写页面的时候发现一个非常有意思的事。Firefox滚动条在Win10和Win11下表现居然不一致。在网上几经查找资料&#xff0c; 终于找到原因所在。总结成下面的文章&#xff0c;加深印象也防止下次遇到。 总结 参考文章&#xff1a; Firefox…

云快充协议1.5版本的充电桩系统软件

介绍 小程序端&#xff1a;城市切换、附近电站、电桩详情页、扫码充电、充电中动态展示、订单支付、个人中心、会员充值、充值赠送、联系客服&#xff1b; 管理后台&#xff1a;充电数据看板、会员管理、订单管理、充值管理、场站运营、文章管理、财务管理、意见反馈、管理员管…

VBA学习(25):从一个工作表复制数据到另一个工作表

今天演示一个简单的例子&#xff0c;也是经常看到网友问的问题&#xff0c;将一个工作表中的数据复制到另一个工作表。 如下图1所示&#xff0c;有3个工作表&#xff0c;需要将工作表“新数据#1”和“新数据#2”中的数据复制到工作表“汇总”中。其中&#xff0c;在“汇总”工…

【Web】LIT CTF 2024 题解(全)

目录 anti-inspect jwt-1 jwt-2 traversed kirbytime scrainbow anti-inspect 因为一直while true&#xff0c;网页会卡死无法访问 const flag "LITCTF{your_%cfOund_teh_fIg_94932}";console.log(flag,"background-color: darkblue; color: white; f…

Python办公自动化:使用`xlutils` 修改Excel文档

在日常办公自动化中&#xff0c;除了读取Excel文件&#xff0c;我们还经常需要对文件进行修改或更新。在Python中&#xff0c;除了xlrd&#xff0c;还可以使用xlutils库来实现对Excel文件的修改操作。本文将继续以“巴黎奥运会奖牌榜.xlsx”文件为例&#xff0c;讲解如何使用xl…

eNSP 华为浮动路由

R1&#xff1a; <Huawei>system-view [Huawei]sysname R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 172.16.1.1 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 10.10.1.1 24 [R1-GigabitEthernet0/0/1]quit [R1]vlan 10 //e口是…