荷香堪筑梦,鸳鸯和月寻。(变相BFS搜索)

本题链接:登录—专业IT笔试面试备考平台_牛客网

题目:

样例:

输入
3 4 2
....
***.
..a.
输出
yes

思路:

        根据题意,这里 1 s 可以移动多次,我们将每次可以移动避开雪的的位置存储起来,判断当移动到了顶部,说明完全可以避开雪。

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define x first
#define y second
#define int long long
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;
inline void solve();signed main()
{
//	freopen("a.txt", "r", stdin);IOS;int _t = 1;// cin >> _t;while (_t--){solve();}return 0;
}
int n,m,k;
char g[1010][1010];		// 下雪图
bool st[1010][1010];	// 标记是否走过
using PII = pair<int,int>;
inline void BFS(int x,int y)
{queue<PII>q;q.emplace(x,y);st[x][y] = true;while(q.size()){PII now = q.front();q.pop();// 如果到达了最顶部,说明完全避开了所以雪if(now.x == 1){cout << "yes" << endl;return ;}st[now.x][now.y] = true;// 当前位置 的 上右边可移动最长距离int rlen = min(now.y + k,m);for(int i = now.y;i <= rlen;++i){// 如果这个位置没走过,我们存储起来可以走到这个的位置if(g[now.x - 1][i] == '.' and !st[now.x - 1][i]){// 标记这里走过了st[now.x - 1][i] = true;q.emplace(PII(now.x - 1,i));}}// 当前位置 的 上右边可移动最长距离int llen = min(now.y - k,1LL);for(int i = now.y - 1;i >= llen;--i){// 如果这个位置没走过,我们存储起来可以走到这个的位置if(g[now.x - 1][i] == '.' and !st[now.x - 1][i]){// 标记这里走过了st[now.x - 1][i] = true;q.emplace(PII(now.x - 1,i));}}}cout << "no" << endl;	// 如果一直走不到 顶部,输出no
}
inline void solve()
{int x,y;cin >> n >> m >> k;for(int i = 1;i <= n;++i){for(int j = 1;j <= m;++j){cin >> g[i][j];if(g[i][j] == 'a'){x = i;y = j;}}}BFS(x,y);
}

最后提交:

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

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

相关文章

线程池

文章目录 普通线程池自定义线程池 普通线程池 //创建线程池&#xff0c;不指定上限 ExecutorService pool1 Executors.newCachedThreadPool(); //创建线程池&#xff0c;指定上限 ExecutorService pool1 Executors.newFixedThreadPool(5); --------------------------------…

【Linux】文件内容相关的命令,补充:管道符

1、查看文件内容 &#xff08;1-1&#xff09;查看文件内容&#xff1a;cat&#xff0c;tac&#xff0c;head&#xff0c;tail 查看文件内容cat 文件名查看文件内容并显示行号cat -n 文件名倒着查看文件内容&#xff08;从最后一行开始&#xff09;tac 文件名查看文件前10行…

Day1| Java基础 | 1 面向对象特性

Day1 | Java基础 | 1 面向对象特性 基础补充版Java中的开闭原则面向对象继承实现继承this和super关键字修饰符Object类和转型子父类初始化顺序 多态一个简单应用在构造方法中调用多态方法多态与向下转型 问题回答版面向对象面向对象的三大特性是什么&#xff1f;多态特性你是怎…

Vscode 实现代码跳转功能

随笔 目录 1. 安装Python 2. 安装Pylance 3. 选择解释器 1. 安装Python 2. 安装Pylance 3. 选择解释器 到此即可实现跳转功能

k8s部署skywalking(helm)

官方文档 官方文档说明&#xff1a;Backend setup | Apache SkyWalking官方helm源码&#xff1a;apache/skywalking-helm官方下载&#xff08;包括agent、apm&#xff09;:Downloads | Apache SkyWalking 部署 根据官方helm提示&#xff0c;选择你自己部署的方式&#xff0c…

Adobe-Premiere-CEP 扩展 入门-视频剪辑-去气口插件-Silence Remover

短视频&#xff0c;这两年比较火&#xff0c;不要再问为什么用Premiere&#xff0c;非常难用&#xff0c;为什么不用某影&#xff0c;某些国内软件非常接地气简单&#xff0c;又例如某音资深的视频短编辑就很好用了。。。 Premiere二次开发调试难&#xff0c;不如自己搞个cons…

无线通信基础

这里写目录标题 通信概述什么是无线通信无线通信电磁波 通信概述 什么是无线通信 无线通信 : 是指利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信方式 无线通信的关键技术包括调制技术、解调技术、信道编码技术、信号处理技术、天线技术等。这些技术的不断…

Qt :信号与槽

信号与槽 信号介绍connect 函数使用connect 函数传参问题 定义槽&#xff08;solt&#xff09;函数方法一方法二 定义信号关键字 signals、emit 定义带参数的信号和槽参数个数不一致问题断开信号和槽的连接 disconnect lambda 表达式 信号介绍 Qt 中&#xff0c;信号会涉及三个…

Java 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

nginx--FastCGI

CGI 概念 nginx通过与第三方基于协议实现&#xff0c;即通过某种特定协议将客户端请求转发给第三方服务处理&#xff0c;第三方服务器会新建新的进程处理用户的请求&#xff0c;处理完成后返回数据给Nginx并回收进程(下次处理有需要新建)&#xff0c;最后nginx在返回给客户端…

layui 数据表格 新增一行

第一件事 先把 闲心大佬的官网 贴上 &#xff1a;layui 官网 layui 数据表格中 新增一行 官网拉下来的一个 大体结构就这样 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"width…