IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 题201.2022寒假天梯赛训练-7-9 拯救007 (25 分) -> 正文阅读

[数据结构与算法]题201.2022寒假天梯赛训练-7-9 拯救007 (25 分)


题201.2022寒假天梯赛训练-7-9 拯救007 (25 分)


一、题目

在这里插入图片描述
在这里插入图片描述

二、题解

本题要抓住几个点。
第一,开始起跳出小岛怎么处理:虽然从岸边起跳肯定可以距离鳄鱼更近更有机会跳到但是岸是个曲线,点无数个,你没法处理,因此我们不妨利用这是个圆形的岛,将起跳点直接设置在原点,然后跳的距离多一个岛屿的半径长度即可。
第二,如何判断我能不能跳到下一个鳄鱼头上:都是一个个点,我们自然是用两点间距离公式得到距离和能跳的距离比较,如果前者小于等于后者,则可以跳过去
第三,如何判断能够跳出湖:因为湖是正方形的,四条直线段组成了四条边,你从鳄鱼头上试图往岸上跳,你肯定想看我离得最近的时候能不能跳过去啊,而最近肯定是跳垂直于岸边吧,所以直接想着看看往-x方向,+x方向,-y方向,+y方向试跳就好,看是否有一条能够跳到岸上(超过了x or y的边界)。
代码如下:

#include <bits/stdc++.h>

using namespace std;

int N,D;
int visited[101];//标记那个鳄鱼是否被跳过了,即是否点被访问过了
int flag=0;//用于标记007是否有救

struct Point
{
    int x;
    int y;
}P[101];//开个结构体数组存点坐标

double getD(Point p1,Point p2)//计算两点间距离
{
    return sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2));
}

void dfs(int v0)//改造dfs算法,传参传下标就好了,有了下标,点不愁拿不到
{
    Point p0=P[v0];
    visited[v0]=1;//标记访问
    if(p0.x-D<=-50||p0.x+D>=50||p0.y-D<=-50||p0.y+D>=50)//判断是否能跳出池子
    {
        flag=1;
        return;
    }
    if(p0.x==0&&p0.y==0)//007在原点时
    {
        for(int i=1;i<=N;i++)
        {
            if(visited[i]!=1&&getD(P[i],p0)<=D+7.5)//因为中间是个圆形的小岛,所以从小岛岸边起跳相当于从原点起跳,但是跳的距离可以多7.5m(转化成定点起跳)
            {
                dfs(i);
            }
        }
    }
    else
    {
        for(int i=1;i<=N;i++)
        {
            if(visited[i]!=1&&getD(P[i],p0)<=D)//两点间距离小于等于能跳的距离则继续dfs那个点
            {
                dfs(i);
            }
        }
    }
}

int main()
{
    cin>>N>>D;
    P[0].x=0;P[0].y=0;
    for(int i=1;i<=N;i++)
    {
        scanf("%d%d",&P[i].x,&P[i].y);
    }
    dfs(0);
    if(flag)
    {
        cout<<"Yes"<<endl;
    }
    else
    {
        cout<<"No"<<endl;
    }
}


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:44:21  更:2022-01-17 11:46:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/26 18:07:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码