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

【题目来源】
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]) { //prunereturn 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 boundaryif(f[nx][ny]) continue; //having goneif(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 4out:
Yes
No
*/




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







 

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

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

相关文章

【Liunx】冯诺伊曼体系结构

冯诺伊曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺伊曼体系。 到目前为止&#xff0c;我们所认识的计算机&#xff0c;都是由一个个硬件所组成的。 输入单元&#xff1a;键盘&#xff0c;鼠标&am…

情报与GPT技术大幅降低鱼叉攻击成本

邮件鱼叉攻击&#xff08;spear phishing attack&#xff09;是一种高度定制化的网络诈骗手段&#xff0c;攻击者通常假装是受害人所熟知的公司或组织发送电子邮件&#xff0c;以骗取受害人的个人信息或企业机密。 以往邮件鱼叉攻击需要花费较多的时间去采集情报、深入了解受…

Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; …

2023国赛数学建模A题B题C题D题资料思路汇总 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022年数学建模c题思路_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛a题题目_UST数模…

[保研/考研机试] KY212 二叉树遍历 华中科技大学复试上机题 C++实现

题目链接&#xff1a; 二叉树遍历_牛客题霸_牛客网二叉树的前序、中序、后序遍历的定义&#xff1a; 前序遍历&#xff1a;对任一子树&#xff0c;先访问根&#xff0c;然后遍历其左子树&#xff0c;最。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169…

Apipost数据模型功能详解

在API设计和开发过程中&#xff0c;存在许多瓶颈&#xff0c;其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作&#xff1a;在每个API中都编写相同的数据&#xff0c;这不仅浪费时间和精力&#xff0c;还容易出错并降低API的可维护性。 为了解决这个问题&a…

注册中心/配置管理 —— SpringCloud Consul

Consul 概述 Consul 是一个可以提供服务发现&#xff0c;健康检查&#xff0c;多数据中心&#xff0c;key/Value 存储的分布式服务框架&#xff0c;用于实现分布式系统的发现与配置。Cousul 使用 Go 语言实现&#xff0c;因此天然具有可移植性&#xff0c;安装包仅包含一个可执…

MySql014——分组的GROUP BY子句和排序ORDER BYSELECT子句顺序

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句》中创建的products表 一、GROUP BY子句基础用法 SELECT vend_id, COUNT(*) AS num_prods FROMstudy.products GROUP BY vend_id;上面的SELECT语句指定了两个列&#xff0c;vend_id包含产品供应商的ID&…

构建系统自动化-autoreconf

autoreconf简介 autoreconf是一个GNU Autotools工具集中的一个命令&#xff0c;用于自动重新生成构建系统的配置脚本和相关文件。 Autotools是一组用于自动化构建系统的工具&#xff0c;包括Autoconf、Automake和Libtool。它们通常用于跨平台的软件项目&#xff0c;以便在不同…

【数据结构与算法】迪杰斯特拉算法

迪杰斯特拉算法 介绍 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是典型最短路径算法&#xff0c;用于计算一个节点到其他节点的最短路径。它的主要特点是以中心向外层层扩展&#xff08;广度优先搜索思想&#xff09;&#xff0c;直到扩展到终点为止。 算法过程 设置…

离谱的Bug

离谱的 Bug Bug 情况发现 Bug修改 Bug其他感受历史 Bug火星Spirit号Mars Global Surveyor任务 Bug 情况 有一次&#xff0c;我在开发一个网页应用程序时&#xff0c;遇到了一个令人目瞪口呆的Bug。这个Bug出现在一个特定的页面上&#xff0c;当用户点击某个按钮时&#xff0c;…

Redis 十大数据类型

Redis数据类型都有哪些&#xff1f; Redis支持丰富的数据类型&#xff0c;那么具体在Redis7中都有哪些数据类型呢&#xff1f;请看下图&#xff1a; 官网介绍&#xff1a;https://redis.io/docs/data-types/。 其中&#xff0c;String、Hash、List、Set、Sorted Set等类型是大…

T599聚合物电容器:在汽车应用中提供更长的使用寿命的解决方案

自从电子技术被引入汽车工业以来&#xff0c;汽车的技术含量一直在提升。诸多技术被应用在汽车上&#xff0c;使汽车的形象更接近于轮子上的超级计算机。更多传感器、更强大的计算能力和电力被装载到汽车上&#xff0c;汽车应用中的电子产品数量正在迅速增长。随着电动汽车和自…

node使用高版本的oracledb导致连接oracle的Error: NJS-138异常

异常信息如下 Error: NJS-138: connections to this database server version are not supported by node-oracledb in Thin mode 我的oracle版本是11g&#xff0c;之前的使用正常&#xff0c;今天却报错了&#xff0c;显示不支持thin模式&#xff0c;后面回退版本就可以了。

winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?

这里写自定义目录标题 一、.net 6 和 framework 创建的项目的两者的区别二、.net 6 创建的winform 项目如何添加图表控件&#xff08;以ScottPlot为例&#xff09;三、framewrok 创建的winform 项目如何添加图表控件接下来&#xff0c;说明基于.net framework 的 winform 项目如…

【云驻共创】华为云之手把手教你搭建IoT物联网应用充电桩实时监控大屏

文章目录 前言1.什么是充电桩2.什么是IOT3.什么是端、边、云、应用协同4.什么是Astro轻应用 一、玩转lOT动态实时大屏&#xff08;线下实际操作&#xff09;1.Astro轻应用说明1.1 场景说明1.2 资费说明1.3 整体流程 2.操作步骤2.1 开通设备接入服务2.2 创建产品2.3 注册设备2.4…

C++之std::list<string>::iterator迭代器应用实例(一百七十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

OPTEE3.17+ubuntu20.04+qemu_v8搭建OPTEE开发环境

参考文章&#xff1a; https://blog.csdn.net/capodexi/article/details/123548850 https://blog.csdn.net/qq_42557044/article/details/130973200 https://blog.csdn.net/zhuwade/article/details/125513873 https://zhuanlan.zhihu.com/p/521196386 https://blog.csdn.net/…

解决方案中-excel表格的常用功能

解决方案中-excel表格的常用功能&#xff1a; 1.冻结表格的列&#xff0c;行 1.1冻结表格的列&#xff0c;行 需求&#xff1a;表格很多列的内容&#xff0c;我需要关注后面的内容的同时也需要关注前面的内容 操作步骤&#xff1a; 选定指定的列【那一列内容】&#xff0c;…

java八股文面试[JVM]——垃圾回收

参考&#xff1a;JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 GC垃圾回收面试题&#xff1a; JVM内存模型以及分区&#xff0c;需要详细到每个区放什么 堆里面的分区&#xff1a;Eden&#xff0c;survival from to&#xff0c;老年代&#xff0c;各…