罗勇军 →《算法竞赛·快冲300题》每日一题:“超级骑士” ← DFS

news2024/10/6 4:14:16

【题目来源】
http://oj.ecustacm.cn/problem.php?id=1810
http://oj.ecustacm.cn/viewnews.php?id=1023

https://www.acwing.com/problem/content/3887/

【题目描述】
现在在一个无限大的平面上,给你一个超级骑士。
超级骑士有N种走法,请问这个超级骑士能否到达平面上的所有点。
每种走法输入两个数字 xx 和 yy,表示超级骑士可以从任意一点 (x,y) 走到 (x+xx,y+yy)。

【输入格式】
输入第一行为正整数 T,表示存在 T 组测试数据。(1≤T≤100)
对于每组测试数据,第一行输入正整数 N,表示有 N 种走法。(1≤N≤100)
接下来N行,每行两个正整数 xx 和 yy。(
-100≤xx,yy≤100

【输出格式】
对于每组测试数据,如果可以到达平面上所有点,输出Yes,否则输出No。

【输入样例】
2
3
1 0
0 1
-2 -1
5
3 4
-3 -6
2 -2
5 6
-1 4

【输出样例】
Yes
No

【算法分析】
因为题意会走回头路,所以不能用动态规划算法,需要用 BFS 或 DFS 算法。由于题意规定每步走法由输入的两个数字 xx 和 yy 决定,表示超级骑士可以从
任意一点 (x,y) 走到 (x+xx,y+yy),且 -100≤xx, yy≤100。不失一般性,可将起点设为 (100,100)。若设 (xx,yy) 为 (-100,-100)、(-100,100)、(100,-100)、(100,100),那么走一步最远可到 (100-100,100-100)、(100-100,100+100)、(100+100,100-100)、(100+100,100+100),即 (0, 0)、(0, 200)、(200, 0)、(200, 200)。
虽然题目问能不能到达所有的点,但其实不用真的检查是否能到所有的点。只需检查从某个任意点 (sx, sy) 出发,存在 (sx, sy) 的上、下、左、右的点都可到达,可立即返回“Yes”,不用再遍历其他的点,这就是
剪枝的应用。这是因为,若给定的走法能够保证存在某个任意点 (sx, sy) 的上、下、左、右的点都可到达,那么平面上的任意点都可达。或从直观上分析,能否走到平面上的所有点,取决于骑士走法的粒度(或称步幅),粒度越小越有可能达到所有点。如输入样例中的 (1,0)、(0,1)、(-2,-1),因为粒度较小,平面上的所有点都可达。而输入样例中的 (3,4)、(-3,-6)、(2,-2)、(5,6)、(-1,4),因为粒度较大,平面上有的点就走不到。
DFS算法模板:https://blog.csdn.net/hnjzsyjyj/article/details/125801217

void dfs(int step){
    判断边界{
        输出解 
    }
 
    尝试每一种可能{
        满足check条件{
            标记
            继续下一步:dfs(step+1)
            恢复初始状态(回溯的时候要用到)
        }
    }
}

BFS算法模板:https://blog.csdn.net/hnjzsyjyj/article/details/118736059

助记:建-入-量:头-出-入”。
 
其中,“建-入-量:头-出-入”各字的解析如下:
建:建队
入:入队
量:队中元素个数。作为while循环的条件。
头:队头
出:出队
入:入队

一个记忆场景,“小猫咪在好的洞口,想洞。先用胡子过洞口大小后,然后用头出入洞”。

【算法代码】

#include<bits/stdc++.h>
using namespace std;

const int maxn=105;
int dx[maxn],dy[maxn];
bool f[2*maxn][2*maxn];
int sx=100,sy=100;
int n;

bool dfs(int x, int y) {
    f[x][y]=true;
    if(f[sx-1][sy] && f[sx+1][sy] && f[sx][sy-1] && f[sx][sy+1]) { //prune
        return true;
    }
    for(int i=1; i<=n; i++) {
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx<0 || nx>200 || ny<0 || ny>200) continue; //check boundary
        if(f[nx][ny]) continue; //having gone
        if(dfs(nx,ny)) return true;
    }
    return false;
}

int main() {
    int T;
    cin>>T;
    while(T--) {
        cin>>n;
        for(int i=1; i<=n; i++) {
            cin>>dx[i]>>dy[i];
        }
        memset(f,0,sizeof(f));
        if(dfs(sx,sy)) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}


/*
in:
2
3
1 0
0 1
-2 -1
5
3 4
-3 -6
2 -2
5 6
-1 4

out:
Yes
No
*/




【参考文献】
https://blog.csdn.net/weixin_43914593/article/details/131791202







 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「我的编程笔记」——记录学习中的代码、函数、概念等

文章目录 每日一句正能量前言常用的代码登录存储 特定函数MD5加密 复杂概念1. 多线程2. 集合类3. 异常处理4 泛型5 反射 特定功能1. 文件操作2. 网络通信3. 图形绘制4. 数据库操作5. 多媒体处理 后记 每日一句正能量 不管昨天、今天、明天&#xff0c;能豁然开朗就是最美好的一…

Hugging News #0821: 新的里程碑:一百万个代码仓库!

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

Mysql系列 - 第2天:详解mysql数据类型(重点)

这是mysql系列第2篇文章。 环境&#xff1a;mysql5.7.25&#xff0c;cmd命令中进行演示。 主要内容 介绍mysql中常用的数据类型 mysql类型和java类型对应关系 数据类型选择的一些建议 MySQL的数据类型 主要包括以下五大类 整数类型&#xff1a;bit、bool、tinyint、smal…

「对冲」布局?激光雷达行业大佬「个人投资」4D毫米波雷达

随着高阶智驾从高端车型逐步下沉中低价位市场&#xff0c;核心传感器&#xff0c;尤其是激光雷达和4D成像毫米波雷达的目标市场也在寻求分层和融合。 “激光雷达是在自动驾驶出现后才崭露头角。在这些系统开发的早期阶段&#xff0c;很多公司不惜一切代价使传感器尽可能强大。但…

Profibus在工业通讯中的应用案例

Profibus总线是现代自动化中应用非常广泛的一种标准网络通信方案&#xff0c;它具有高效、可靠、灵活等优势&#xff0c;可以实现设备之间的通信和数据交换。下面我们就来为大家介绍几个Profibus在工业通讯中的应用案例。 Profibus在工业通讯中的应用案例 1、汽车制造 在汽车…

文件四剑客

目录 前言 一、正则表达式 二、grep 三、find 四、sed 五、awk 前言 文件四剑客是指在计算机领域中常用的四个命令行工具&#xff0c;包括awk、find、grep和sed。它们在处理文本文件和搜索文件时非常强大和实用。 1. awk是一种强大的文本处理工具&#xff0c;它允许用户根据指…

【Hugging Face】使用方法和如何挑选一个自己需要的模型

【界面介绍】 【个人主页】 注册之后&#xff08;国内邮箱免费注册&#xff09;会有个人主页&#xff0c;用来调试创建自己的模型和数据集 右边是网站中的模型使用趋势&#xff0c;左边&#xff1a; 注册账户后可以提供免费训练模型和数据集的工作台&#xff0c;创建即可&…

算法基础(1):排序和查找算法

1、排序算法 1.1、堆排序(大顶堆)-重点&#xff1a; 参考文章&#xff1a;堆排序1、堆排序二 前置知识&#xff1a; 大顶堆&#xff1a;完全二叉树&#xff0c;且父节点大于左右儿子&#xff0c;左右子树又是大顶堆&#xff0c;依赖数组来实现(vector)第一个节点的父节点&…

接口性能测试 —— Jmeter并发与持续性压测

接口压测的方式&#xff1a; 1、同时并发&#xff1a;设置线程组、执行时间、循环次数&#xff0c;这种方式可以控制接口请求的次数 2、持续压测&#xff1a;设置线程组、循环次数&#xff0c;勾选“永远”&#xff0c;调度器&#xff08;持续时间&#xff09;&#xff0c;这种…

Git使用篇:MacWindow---Vscode 终端命令行显示分支名和Tab自动补全

###&#xff1a;mac终端美化 https://www.jianshu.com/p/fd457aaee3e7 配置地址 终端改成git // 输入命令,检查是否有/bin/zsh(macOS自带zsh) cat /etc/shells // 修改默认的bash为zsh,重启Terminal chsh -s /bin/zsh// 检查修改结果,显示/bin/zsh即成功. echo $SHELLwindow终…

8年经验之谈 —— 基于jmeter的性能全流程测试

01、做性能测试的步骤 1、服务器性能监控 首先要在对应服务器上面安装性能监控工具&#xff0c;比如linux系统下的服务器&#xff0c;可以选择nmon或者其他的监控工具&#xff0c;然后在jmeter模拟场景跑脚本的时候&#xff0c;同时启动监控工具&#xff0c;这样就可以获得jm…

ChatGLM-6B微调记录

目录 GLM-130B和ChatGLM-6BChatGLM-6B直接部署基于PEFT的LoRA微调ChatGLM-6B GLM-130B和ChatGLM-6B 对于三类主要预训练框架&#xff1a; autoregressive&#xff08;无条件生成&#xff09;&#xff0c;GPT的训练目标是从左到右的文本生成。autoencoding&#xff08;语言理解…

每日两题 83删除排序链表的重复元素 82删除排序链表的重复元素||

83 题目 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&…

*看门狗各函数讲解

独立看门狗配置步骤 1&#xff09;取消寄存器写保护&#xff0c;通过函数 HAL_IWDG_Init 实现。 看门狗的喂狗时间&#xff08;也就是看门狗溢 出时间&#xff09;的计算方式为&#xff1a; Tout((42^prer) rlr) /32 其中 Tout 为看门狗溢出时间&#xff08;单位为 ms&#…

Navicat里.sql文件转换到.db文件

1.在桌面创建一个xxx.db文件&#xff0c;在navicat中创建数据库的时候会用到 2.在navicat创建数据库 在 Navicat 的导航栏中&#xff0c;选择 "工具" -> "SQL 文件执行器"。 在 SQL 文件执行器中&#xff0c;单击 "打开" 按钮&#xff0c;选择…

无锡市惠丰电子有限公司采购ZJ-5型叠层压电D33测试仪及相关配套夹具

无锡市惠丰电子有限公司采购ZJ-5型叠层压电D33测试仪及相关配套夹具 无锡市惠丰电子有限公司成立于1998年&#xff0c;是一家专门从事电子陶瓷产品研发&#xff0c;生产&#xff0c;销售&#xff0c;服务于一体的股份制公司&#xff0c;座落于素有鱼米之乡的太湖之滨城市——无…

Wapp群发王,释放全球市场潜力

随着移动互联网的普及&#xff0c;WhatsApp在全球范围内的用户数量持续迅猛增长。据数据显示&#xff0c;截至2022年2月&#xff0c;WhatsApp的月活跃用户数已超过20亿&#xff0c;遍布全球180多个国家和地区&#xff0c;在 58 个国家更成为常用通讯软件。这使得 WhatsApp 成为…

滑块验证3-接第1篇

driver拖动滑块 滑块验证的过程比较常使用driver模拟滑动&#xff0c;这样能够省去很多验证操作。 如果设置适合的滑动轨迹&#xff0c;成功率是非常高的。 当然&#xff0c;麻烦的是现在很多站点都做了识别driver的反爬&#xff0c;而且比较受网络的影响。 所需包 seleniu…

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些Pod通过Endpoints…

特斯拉Model 3的七年狂飙

‍ 作者 | 张祥威 编辑 | 德新 发布一周拿下32万张订单&#xff0c;之后用时五年&#xff0c;交付量突破100万辆。粗略计算&#xff0c;自2016年发布至今&#xff0c;特斯拉Model 3已交付超150万辆。 放眼新能源赛道&#xff0c;如此战绩 别无二家。 Model 3踩中纯电动车的…