宽度有限搜索BFS搜索数及B3625 迷宫寻路 P1451 求细胞数量 B3626 跳跃机器人

宽度有限搜索BFS搜索

B3625 迷宫寻路

题面

题目描述

机器猫被困在一个矩形迷宫里。

迷宫可以视为一个 n×m 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。

机器猫初始时位于 (1,1) 的位置,问能否走到 (n,m) 位置。

输入格式

第一行,两个正整数 n,m。

接下来 n 行,输入这个迷宫。每行输入一个长为 m 的字符串,# 表示墙,. 表示空地。

输出格式

仅一行,一个字符串。如果机器猫能走到 (n,m),则输出 Yes;否则输出 No

输入输出样例

输入 #1 

3 5
.##.#
.#...
...#.

输出 #1 

Yes

说明/提示

样例解释

路线如下:(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)

题解

BFS的思路是从标点(1,1)开始逐层往外扩展,此时我们选择建立一个队列用来保存待访问的点,只要队列非空,判断越界情况和其他非法情况后一直访问相邻位置,可以用一个结构组表示x,y坐标。为了避免重复访问的情况,我们使用vis函数。访问一个点后把vis[x][y]负值与1。到最后如果队列的某个点到了(n,m) 终点,答案设为true,输出这个情况YES。

代码

#include <bits/stdc++.h>
using namespace std;int n, m, isOk;
char a[105][105];
bool vis[105][105];struct Pos {int x, y;Pos(int ax, int ay) {x = ax, y = ay;}
};void bfs() {queue<Pos> q;q.push(Pos(1, 1));while(!q.empty()) {Pos now = q.front();q.pop();int x = now.x, y = now.y;if(x < 1 || x > n) continue;if(y < 1 || y > m) continue;if(a[x][y] == '#') continue;if(vis[x][y]) continue;vis[x][y] = 1;if(x == n && y == m) isOk = true;q.push(Pos(x + 1, y));q.push(Pos(x - 1, y));q.push(Pos(x, y + 1));q.push(Pos(x, y - 1));}}int main() {cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> a[i][j];bfs();if(isOk)cout << "Yes" << endl;elsecout << "No" << endl;return 0;
}

P1451 求细胞数量

题面

题目描述

一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

输入格式

第一行两个整数代表矩阵大小 n 和 m。

接下来 n 行,每行一个长度为 m 的只含字符 0 到 9 的字符串,代表这个 n×m 的矩阵。

输出格式

一行一个整数代表细胞个数。

输入输出样例

输入 #1

4 10
0234500067
1034560500
2045600671
0000000089

输出 #1

4

题解

这道题的意思,只要相邻的数不是0,那么它和其他相邻的数构成一个细胞,例如样例中的12是一个细胞,23453456456是一个细胞,67,567189,一共四个细胞。这一道题可以用BFS也能用DFS搜索方法。在队列非空的状态依次判断非法情况,避免重复访问,判断是否到终点并寻找答案,继续访问相邻位置。在main循环中bfs之前要判断这个数是否是细胞,是否访问过。Vis可以当访问数组的同时在这类题当成染色“Flood Fill” 

注意事项:

  • 若(x,y)是细胞且无色,则答案+1、并将其所属整个细胞染色
  • BFS 的实现 :当队列非空,访问队首,并将相邻结点人队 

代码

#include <bits/stdc++.h>
using namespace std;
int n, m, ans;
char a[105][105];
bool vis[105][105];
struct Pos {int x, y;Pos(int ax = 0, int ay = 0) {x = ax; // 该结点的 x 值初始化为 axy = ay; // 该结点的 y 值初始化为 ay} 
};
// 从 (x, y) 开始 BFS 整个细胞
void bfs(int x, int y) {queue<Pos> q;q.push(Pos(x, y)); // 将 (x,y) 入队while(!q.empty()) { // 当队列非空Pos now = q.front(); // 现在处理队首结点q.pop(); // 队首出队int x = now.x, y = now.y;if(x < 1 || x > n) continue;if(y < 1 || y > m) continue;if(a[x][y] == '0') continue;    // 不是细胞点if(vis[x][y]) continue;       // 如果这个点被访问过则跳过vis[x][y] = 1;       // 用 vis 数组避免重复访问q.push(Pos(x+1, y)); // 将上方结点加入到队列q.push(Pos(x-1, y)); // 将下方结点加入到队列q.push(Pos(x, y+1)); // 将左方结点加入到队列q.push(Pos(x, y-1)); // 将右方结点加入到队列}
}
int main() {cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> a[i][j];for(int x = 1; x <= n; x++)for(int y = 1; y <= m; y++)if(a[x][y]!='0'&& vis[x][y]==0) { // (x,y) 这个点是细胞点,且未访问过ans++;bfs(x,y); // 开始对 (x,y) 这个点进行 BFS}cout << ans << endl;return 0;
}

B3626 跳跃机器人

题面

题目描述

地上有一排格子,共 n 个位置。机器猫站在第一个格子上,需要取第 n 个格子里的东西。

机器猫当然不愿意自己跑过去,所以机器猫从口袋里掏出了一个机器人!这个机器人的行动遵循下面的规则:

  • 初始时,机器人位于 1 号格子
  • 若机器人目前在 x 格子,那么它可以跳跃到 x−1,x+1,2x 里的一个格子(不允许跳出界)

问机器人最少需要多少次跳跃,才能到达 n 号格子。

输入格式

仅一行,一个正整数,表示 n。

输出格式

仅一行,一个正整数,表示最少跳跃次数。

输入输出样例

输入 #1

30

输出 #1

6

输入 #2

50

输出 #2

7

输入 #3

64

输出 #3

6

输入 #4

63

输出 #4

8

说明/提示

样例解释

第一组样例:
1→2→4→8→16→15→301→2→4→8→16→15→30

第二组样例:
1→2→3→6→12→24→25→501→2→3→6→12→24→25→50

第三组样例:
1→2→4→8→16→32→641→2→4→8→16→32→64

第四组样例:
1→2→4→8→16→32→31→62→631→2→4→8→16→32→31→62→63

请注意在本组样例中,63 不能通过 64−1 得到,因为格子总数为 63,没有第 64 个格子。

题解

代码

#include <bits/stdc++.h>
using namespace std;
struct Pos {int x, cost;Pos(int ax = 0, int acost = 0) {x = ax, cost = acost;}
};
int n;
bool vis[1000005];
void bfs() {int x=1, cost=0;queue <Pos> q;q.push(Pos(x,cost)); while(!q.empty()) {Pos now = q.front();q.pop();int x = now.x, cost = now.cost;if(x<1||x>n) // 处理越界,如果 x 不在 [1,n] 范围内continue;           if(vis[x]) // 用 vis 数组判断重复continue; vis[x] = 1; // 用 vis 数组标记这个数字被访问过if(x == n) {cout << cost << endl;return;}q.push(Pos(x-1, cost+1));q.push(Pos(x+1,cost+1));q.push(Pos(2*x, cost+1));}
}
int main() {cin >> n;bfs();return 0;
} 

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

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

相关文章

localhost:8080 is already in use

报错原因&#xff1a;本机的8080端口号已经被占用。因为机器的空闲端口号是随机分配的&#xff0c;而idea默认启动的端口号是8080,所以是存在这种情况。 对于这个问题&#xff0c;我们只需要重启idea或者修改项目的启动端口号即可。 更推荐第二种。对于修改项目启动端口号&…

Python 程序设计入门(020)—— 循环结构程序设计(1):for 循环

Python 程序设计入门&#xff08;020&#xff09;—— 循环结构程序设计&#xff08;1&#xff09;&#xff1a;for 循环 目录 Python 程序设计入门&#xff08;020&#xff09;—— 循环结构程序设计&#xff08;1&#xff09;&#xff1a;for 循环一、for 循环的语法二、for …

ZDH-wemock模块

本次介绍基于版本v5.1.1 目录 项目源码 预览地址 安装包下载地址 wemock模块 wemock模块前端 配置首页 配置mock wemock服务 下载地址 打包 运行 效果展示 项目源码 zdh_web: https://github.com/zhaoyachao/zdh_web zdh_mock: https://github.com/zhaoyachao/z…

TCGA数据下载推荐:R语言easyTCGA包

#使用easyTCGA获取数据 #清空 rm(listls()) gc() # 安装bioconductor上面的R包 options(BioC_mirror"https://mirrors.tuna.tsinghua.edu.cn/bioconductor") if(!require("BiocManager")) install.packages("BiocManager") if(!require("TC…

怎样让音频速度变慢?请跟随以下方法进行操作

怎样让音频速度变慢&#xff1f;在会议录音过程中&#xff0c;经常会遇到主讲人语速过快&#xff0c;导致我们无法清晰听到对方说的内容。如果我们能够减慢音频速度&#xff0c;就能更好地记录对方的讲话内容。此外&#xff0c;在听到快速播放的外语或方言时&#xff0c;我们也…

LA@2@1@线性方程组和简单矩阵方程有解判定定理

文章目录 矩阵方程有解判定定理线性方程组有解判定特化:齐次线性方程组有解判定推广:矩阵方程 A X B AXB AXB有解判定证明推论 矩阵方程有解判定定理 线性方程组有解判定 线性方程组 A x b A\bold{x}\bold{b} Axb有解的充分必要条件是它的系数矩阵A和增广矩阵 ( A , b ) (A,…

机器人的运动范围

声明 该系列文章仅仅展示个人的解题思路和分析过程&#xff0c;并非一定是优质题解&#xff0c;重要的是通过分析和解决问题能让我们逐渐熟练和成长&#xff0c;从新手到大佬离不开一个磨练的过程&#xff0c;加油&#xff01; 原题链接 机器人的运动范围https://leetcode.c…

高等数学教材重难点题型总结(二)导数与微分

本章重点题目较少&#xff0c;除了*标题页没什么特别难的&#xff0c;本帖出于总结性的角度考虑并未囊概全部的*标&#xff0c;最后会出一期*标题的全部内容整理&#xff0c;在攻克重难点的基础上更上一层楼。 1.根据定义求某点处的导数值 2.通过定义证明导数 3.左右导数的相关…

【数据库】P4 过滤数据 WHERE

过滤数据 WHERE 简介WHERE 子句操作符检测单个值案例范围值检查 BETWEEN AND空值检查 NULL 简介 数据库表一般包含大量的数据&#xff0c;很少需要检索表中的所有行。我们只检索所需数据需要指定搜索条件(search criteria)&#xff0c;搜索条件也称为过滤条件(filter conditio…

完全备份、增量备份、差异备份、binlog日志

Top NSD DBA DAY06 案例1&#xff1a;完全备份与恢复案例2&#xff1a;增量备份与恢复案例3&#xff1a;差异备份与恢复案例4&#xff1a;binlog日志 1 案例1&#xff1a;完全备份与恢复 1.1 问题 练习物理备份与恢复练习mysqldump备份与恢复 1.2 方案 在数据库服务器192…

问AI一个严肃的问题

chatgpt的问世再一次掀起了AI的浪潮&#xff0c;其实我一直在想&#xff0c;AI和人类的关系未来会怎样发展&#xff0c;我们未来会怎样和AI相处&#xff0c;AI真的会完全取代人类吗&#xff0c;带着这个问题&#xff0c;我问了下chatgpt&#xff0c;看一看它是怎么看待这个问题…

Modbus工业RFID设备在自动化生产线中的应用

传统半自动化生产线在运作的过程&#xff0c;因为技工的熟练程度&#xff0c;专业素养的不同&#xff0c;在制造过程中过多的人为干预&#xff0c;工厂将很难对每条生产线的产能进行标准化管理和优化。如果半自动化生产线系统是通过前道工序的作业结果和检测结果来决定产品在下…

react实现模拟弹框遮罩的自定义hook

需求描述 点击按钮用于检测鼠标是否命中按钮 代码实现 import React from react; import {useState, useEffect, useRef} from react;// 封装一个hook用来检测当前点击事件是否在某个元素之外 function useClickOutSide(ref,cb) {useEffect(()>{const handleClickOutside…

JMeter接口自动化测试实例—JMeter引用javaScript

Jmeter提供了JSR223 PreProcessor前置处理器&#xff0c;通过该工具融合了Java 8 Nashorn 脚本引擎&#xff0c;可以执行js脚本以便对脚本进行前置处理。其中比较典型的应用就是通过执行js脚本对前端数据进行rsa加密&#xff0c;如登录密码加密。但在这里我就简单的应用javaScr…

PyTorch翻译官网教程-NLP FROM SCRATCH: GENERATING NAMES WITH A CHARACTER-LEVEL RNN

官网链接 NLP From Scratch: Generating Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用字符级RNN生成名字 这是我们关于“NLP From Scratch”的三篇教程中的第二篇。在第一个教程中</intermediate/char_rnn_classification_tutor…

ChatGPT爆火,会给教育带来什么样的影响或者冲击?

近来&#xff0c;人工智能聊天机器人ChatGPT连上热搜&#xff0c;火爆全网。ChatGPT拥有强大的信息整合能力、自然语言处理能力&#xff0c;可谓是“上知天文&#xff0c;下知地理”&#xff0c;而且还能根据要求进行聊天、撰写文章等。 ChatGPT一经推出&#xff0c;便迅速在社…

stop job is running for Advanced key-value store

今天虚拟机磁盘撑满了&#xff0c;本来还能凑合运行&#xff0c;结果重启了下&#xff0c;就报了这个 stop job is running for Advanced key-value store (1min 59s / no limit) 解决方式很简单&#xff0c; 1、虚拟机关电源&#xff0c;任务管理器&#xff0c;关闭VM&#x…

OpenCV-Python中的图像处理-图像直方图

OpenCV-Python中的图像处理-图像直方图 图像直方图统计直方图绘制直方图Matplotlib绘制灰度直方图Matplotlib绘制RGB直方图 使用掩膜统计直方图直方图均衡化Numpy图像直方图均衡化OpenCV中的直方图均衡化CLAHE 有限对比适应性直方图均衡化 2D直方图OpenCV中的2D直方图Numpy中2D…

当Visual Studio遇到 “当前不会命中断点.还没有为该文档加载任何符号“的情况

1.配置项目调试路径&#xff1a; 2.问题解决方案&#xff1a; VS配置调试路径不是默认路径时&#xff0c;需要看生成的文件是否在配置路径内&#xff0c;如果不在的话&#xff0c;可能发生"当前不会命中断点.还没有为该文档加载任何符号"的情况&#xff1b; 右键项…

Kotlin语法

整理关键语法列表如下&#xff1a; https://developer.android.com/kotlin/interop?hlzh-cn官方指导链接 语法形式 说明 println("count ${countnum}")字符串里取值运算 val count 2 var sum 0 类型自动推导 val 定义只读变量&#xff0c;优先 var定义可变变量…