罗勇军 →《算法竞赛·快冲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…

CUDA编程之GPU图像数据结构的设计

第1章 GPU图像数据结构 参考OpenCV中Mat和GpuMat的设计,对当前Image类设计了GPU版本,即GPUImage。 1.1. GPU图像头 设计图像头。 struct GPUImageHeader {int32_t nWidth = 0; //宽度int32_t nHeight = 0; //高度int16_t nChannel = 0; //通道数int32_t nRefCount = …

注册中心/配置管理 —— 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&…

Electron环境搭建

Electron是一个优秀的开源框架&#xff0c;用于构建跨平台的桌面应用程序。它基于Chromium和Node.js&#xff0c;使得开发者可以使用Web技术&#xff08;HTML、CSS和JavaScript&#xff09;来构建可在Windows、macOS和Linux等多个操作系统上运行的应用程序。本文将介绍如何搭建…

wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)

wireshark 实用过滤表达式&#xff08;针对ip、协议、端口、长度和内容&#xff09; 1. 关键字 “与”&#xff1a;“eq” 和 “”等同&#xff0c;可以使用 “and” 表示并且&#xff0c; “或”&#xff1a;“or”表示或者。 “非”&#xff1a;“!" 和 "not”…

HOT100打卡—day9—【堆】—最新8.22(还有1题)

1 215. 数组中的第K个最大元素 215. 数组中的第K个最大元素 时间复杂度要O&#xff08;n&#xff09;所以用了hash&#xff0c;空间换时间&#xff0c;ac代码&#xff1a; class Solution { public:int a[20010];int findKthLargest(vector<int>& nums, int k) {/…

构建系统自动化-autoreconf

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

经济萧条下,RPA投入应该被“牺牲”掉吗?

近期有观点认为&#xff0c;在经济环境不佳的情况下&#xff0c;RPA&#xff08;机器人流程自动化&#xff09;转型不应该被公司考虑。这一观点主要基于经济状况不佳导致公司资金紧张&#xff0c;因此应当停止外部寻找RPA公司进行相关项目。然而&#xff0c;这一观点忽略了RPA转…

Vite好用的前端构建工具

是什么 Vite是Vue的作者尤雨溪开发的 一种新型前端构建工具。 Vite在大型项目开发模式下&#xff0c;打包速度远高于webpack。 Vite 为什么这么快 1. 快速冷启动 Vite只启动一台静态页面的服务器&#xff0c;不会打包全部项目文件代码&#xff0c;服务器根据客户端的请求加…

基于EasyExcel的Excel读取

1.引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version> </dependency>2.读取器代码&#xff1a; package com.vz.utils.excel;import com.alibaba.excel.Eas…

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

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

离谱的Bug

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

【golang】关于指针的有限操作

传统意义上来说&#xff0c;指针是一个指向某个确切的内存地址的值。这个内存地址可以是任何数据或代码的起始地址。在Go语言中有几种东西可以代表"指针"。其中最贴切传统意义的当属uintptr类型的了。该类型实际上是一个数值类型&#xff0c;也是Go语言内建的数据类型…

Redis 十大数据类型

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