蓝桥杯之穿越雷区 BFS

【汽车ECU标定技术解析】DCM文件与A2L、HEX的协同工作机制 本文深入解析了汽车ECU标定中DCM、A2L与HEX三大核心文件的协同工作机制。A2L文件作为定义标定变量地址与规则的“图纸”,DCM文件承载工程师调试后的具体标定数据,最终通过A2L的地址映射,将DCM数据固化生成可刷入ECU的HEX文件,形成完整的标定数据流转闭环。 阅读详情

本题为2015年第六届蓝桥杯C语言A组试题,第4题。
考点:广度优先搜索(BFS)
广搜一般用来解决“最短”“最少”问题,需用到队列。

题目描述

标题:穿越雷区
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?

已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -

坦克车只能水平或垂直方向上移动到相邻的区。

数据格式要求:
输入第一行是一个整数n,表示方阵的大小, 4<=n<100
接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。
A,B都只出现一次。

要求输出一个整数,表示坦克从A区到B区的最少移动步数。
如果没有方案,则输出-1

例如:
用户输入:
5
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -

则程序应该输出:
10

资源约定:
峰值内存消耗 < 512M
CPU消耗 < 1000ms

解题思路

用二维数组map[ ][ ]接收“地图”,注意输入时有空格隔开,需要过滤掉空格。
之后找到入口,即“A”所在位置,从该点开始广度优先搜索。

本题解不打算解释为什么BFS能解决此问题,如果想知道,请移步BFS的相关学习文档。本题作为一个典型的BFS题,该题解意在为此类问题提供一个模板。
详细解释看代码:

#include<iostream>
#include<cstring>
#include<queue>//我们使用STL中的队列容器
using namespace std; 
char map[101][101];
int n;
//以下两个数组为坦克走的四个方向
int bx[4]={-1,1,0,0};
int by[4]={0,0,-1,1};
//定义结构体,方便广搜时入队、出队
struct poi{
    int x;//记录该点横坐标
    int y;//记录该点纵坐标
    int step;//记录从起始点走到该点的步数
}; 
void bfs(int x,int y){
    int vis[101][101]={0};//标记某点是否访问过
    queue<poi>path;//定义队列path
    int row,col,step_n;//三个中间变量,对应结构体的三个变量
    poi p1;//起始点'A'
    p1.x=x;//起始点横坐标
    p1.y=y;//起始点纵坐标
    p1.step=0;//‘A’点的步数肯定是0
    path.push(p1);//'A'点入列
    vis[x][y]=1;//标记'A'点已访问
    while(!path.empty()){//循环遍历,相当于以A为圆心,一圈一圈向四周扩展访问
        //以下三行用来访问当前队首元素,依次获取坐标和步数
        row=path.front().x;
        col=path.front().y;
        step_n=path.front().step;
        //获取之后,元素出队
        path.pop();
        for(int i=0;i<4;i++){//向四个方向探索能否走下去
            if(row+bx[i]>=n||row+bx[i]<0||col+by[i]>=n||col+by[i]<0)
                //如果到达边界
                continue;
            if(vis[row+bx[i]][col+by[i]]==0){//要求该点必须未访问过才能进行下列操作
                if(map[row][col]!=map[row+bx[i]][col+by[i]]){
                //当前该点和接下要走到的点不能相等
                    //满足以上条件,就可以放心大胆的"走"了
                    //定义p2,通过p1给它赋值,然后入队,就相当于“走”到了下一点了
                    poi p2;
                    p2.x=row+bx[i];
                    p2.y=col+by[i];
                    p2.step=step_n+1;
                    path.push(p2);
                    vis[p2.x][p2.y]=1;
                    if(map[p2.x][p2.y]=='B'){//判断是否走完
                        cout<<p2.step<<endl;//走到终点的步数一定是最短的
                        return;
                    }
                }
            }
        }
        //如果四个方向都走不通,则说明无路可走,输出-1,直接返回
        cout<<-1<<endl;
        return;
    }
}
int main(){
    cin>>n;
    int i,j;
    char a;
    for(i=0;i<n;i++){//接收“地图”
        for(j=0;j<n;j++){
            cin>>a;
            if(a==' '){//注意要忽略空格
                --j;
                continue;
            }
            else{
                map[i][j]=a;
            }
        }
    }
    for(i=0;i<n;i++){//用于找到入口'A',因为A不一定在map[0][0]位置
        for(j=0;j<n;j++){
            if(map[i][j]=='A'){
                bfs(i,j);
                break;
            }
        }
        break;
    }
    return 0;
}
Unity零基础到进阶 | Unity中的内存泄漏全解析,原因、排查及避免 Unity 内存泄漏并非传统C++语境中的野指针或未释放堆内存,而是基于其「托管内存(C#)+ 原生内存(引擎/非托管)」双架构的特殊问题——即已废弃、不再被业务逻辑使用的内存块,无法被引擎或系统自动回收,持续占用内存空间,最终引发内存暴涨、GC卡顿、OOM(内存溢出)崩溃,其中移动端、主机端受影响最显著。 Unity 内存主要分为三类,其中泄漏仅发生在前两类,栈内存因系统自动分配/释放,无泄漏风险: 阅读详情

相关推荐

告别环境配置焦虑:在Win10的Ubuntu子系统里搞定CSAPP实验环境(附32/64位库编译指南)

本文详细介绍了如何在Win10的Ubuntu子系统中搭建CSAPP实验环境,包括WSL 2的安装与配置、32/64位库的编译指南以及高效开发工具链的设置。通过优化WSL性能和使用实用技巧,开发者可以轻松应对CSAPP实验中的环境配置问题,提升学习效率。

weixin_30443813的博客 297

蓝桥杯历届-穿越雷区

蓝桥杯历届-穿越雷区标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - - + - - + - + + + - +

Kid_TH的博客 3215

城市规划师必备:ArcMap里用这个免费工具,5步完成建筑群通风廊道分析

本文介绍了城市规划中利用ArcMap进行建筑群通风廊道分析的高效方法,重点讲解了迎风面投影指数(FAI)的应用。通过5个步骤,从数据准备到规划应用,帮助规划师快速评估城市通风潜力,优化建筑布局,提升城市风环境质量。

weixin_26800111的博客 412

c++迷宫题解

标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - - + - - + - + + + - + - + - + B + ...

frothmoon 2486

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 838

手把手完整实现STM32+NB-IoT+MQTT+ThingsCloud云平台+手机APP(Android或iOS)及微信小程序及Web app 应用

本教程以远程温湿度显示及点灯作为示例。最终效果实现本地OLED显示屏、云平台和手机APP、微信小程序和Web App可远程查看温湿度数据,并可远程控制LED灯亮灭。以此完成基于MQTT协议的NB-IoT远程发布订阅数据,以此在本教程基础上可扩展开发更多的功能。

嵌入式阿齐Archie 2万+

Java B组蓝桥杯第六届国赛:穿越雷区

标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - - + - - + - + + + - + - + - + B + - + - 坦克车只能水平或垂直方向上移动到相邻的区。 数据格式要求: 输入第一行是一个整数n,表示.

学习使我快乐_玉祥 479

HiCMAE 论文复现:基于 RAVDESS 数据集的音视频情感识别

多模态情感识别是人工智能领域的重要研究方向,旨在通过结合多种感知模态(如音频、视频、文本等)来更准确地识别人类情感状态。与传统单模态方法相比,多模态方法能够利用不同模态间的互补信息,提高情感识别的鲁棒性和准确性。 RAVDESS(Ryerson Audio-Visual Database of Emotional Speech and Song)是一个常用的多模态情感识别数据集,包含24位专业演员(12名男性,12名女性)表达的8种情感状态(中性、平静、快乐、悲伤、愤怒、恐惧、厌恶和惊讶)的音视频数据。

max500600的博客 498

第六届蓝桥杯国赛真题 穿越雷区

题目: 标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - - + - - + - + + + - + - + -...

kawhi的博客 541

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

大疆精灵 Phantom 4 RTK于2018年发布,是大疆为高精度建图与精准飞行设计的行业级无人机,在精灵4无人机外形的基础上,机身增加了RTK模块,可以实现高精度 RTK 定位导航,相机与 RTK 系统采用微秒级时间同步,可以通过app 进行航线规划飞行

pausau的博客 1万+

AI智算-K8s如何利用IB RDMA网络加速大模型分布式训练

在AI人工智能领域,大模型的微调是提升性能不可或缺的一环。通过结合InfiniBand RDMA网络的高速互联、Kubernetes的云原生容器化部署,以及智能算力调度平台,可以打造一个高效、灵活且可扩展的分布式训练环境。

Kason_iWiki 819

穿越雷区C++

X 星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从 A 区到 B 区去(A,B 区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了 A,B 区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - B + - + - 坦克车只能水平或垂直方向上移动到相邻的区。 输入格

weixin_51160138的博客 867

重回童年的经典系列☀️|【炸弹人小游戏】制作过程+解析 | 收藏起来跟曾经的小伙伴一起梦回童年!

Unity,小游戏开发。 本篇文章对童年经典小游戏——炸弹超人进行制作和解析。不知道有没有勾起你童年的回忆呢!快来和我一起制作这个童年经典的小游戏吧! 敬请品尝!

努力前行,总会成为自己心中的那道光 13万+

蓝桥杯 穿越雷区(bfs)

题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。例如:A + - + -- + - - +- + + + -+ - + - +B + - + -坦克车...

weixin_34041003的博客 161

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝桥杯 15决赛 B4 穿越雷区(bfs)

蓝桥杯 15决赛 B4 穿越雷区(bfs) 标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: 坦克车只能水平或垂直方向上移动到相邻的区。 数据格式要求: 输入第一行是一个整数n,表示方阵的大小, 4<=n<100 接下来是n行,每行

hyoka的博客 321

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

蓝桥杯备战日记(BFS广度搜索)2.15(穿越雷区 )

对于bfs,我们可以解决两个问题,1.从a出发是否存在到达b的路径 2.从a出发到达b的最短路径其中,一可以用dfs,二数据量小时也可以用dfs,不过最好是bfs ,bfs就是一层层的访问,层序遍历,而且树有节点,图没有节点,还包括在无向图中搜索从起始节点到目标节点的路径。代码随想录给v给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

2403_86817891的博客 1041

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

穿越雷区(15年蓝桥杯)BFS的简单应用

因为是刚刚接触DFS和BFS,做这道题就直接用DFS去做发现有很多点不行,尤其是运行效率很慢,在稍微了解BFS后我才知道,BFS更适合求多叉的最短路径。所以后来开始对BFS进行学习。才了解到我还需要了解更多知识点,比如队列相关知识,不过后来在摸索的时候逐渐对这个知识点有了初步的了解。

qq_67421635的博客 554

bfs 蓝桥杯 穿越雷区 python

经典蓝桥杯bfs

weixin_52596361的博客 1239

2015年第六届蓝桥杯 - 国赛 - C/C++大学A组 - D. 穿越雷区

标题:穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - - + - - + - + + + - + - + - + B + ...

Alex 1136

穿越雷区(蓝桥杯)

接下来是 n 行,每行有 n 个数据,可能是 A,B,+,- 中的某一个,中间用空格分开。某坦克需要从 A 区到 B 区去(A,B 区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了 A,B 区,其它区都标了正号或负号分别表示正负能量辐射区。X 星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。输出一个整数,表示坦克从 A 区到 B 区的最少移动步数。第一行是一个整数 n,表示方阵的大小, 4≤n<100。

m0_73841621的博客 732

[蓝桥杯2015决赛]穿越雷区 (BFS)

X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。坦克车只能水平或垂直方向上移动到相邻的区。

qq_63128300的博客 690

[蓝桥杯2015决赛]穿越雷区 (bfs)

一道题,居然卡在了输入数据上,我去。。。 搞了半天也不知道怎么把数据完整的输进去。。。 这一次涨姿势了。。。 #include<bits/stdc++.h> using namespace std; #define ll long long char mp[106][105]; int dir[4][2]= {1,0,-1,0,0,1,0,-1};///方向 int vis[105][105]; ///标记是否走过 int n; struct node { int x,y;

蜡笔小新冲鸭!!! 379

【蓝桥杯】2015决赛 穿越雷区(bfs)

题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: 坦克车只能水平或垂直方向上移动到相邻的区。 输入 输入第一行是一个整数n,表示方阵的大小, 4<=n<100 接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。 输

qianzhezhi1127的博客 239

C++使用BFS求解最短路径

本文主要介绍了BFS广度优先搜索的算法原理,以及蓝桥杯中使用BFS算法的两道题目:穿越雷区与迷宫与陷阱,对题目进行了分析并给出了解题代码,该代码在蓝桥杯的解题平台上进行了提交验证,可获得满分。

weixin_46846685的博客 1146

[蓝桥杯2015决赛]穿越雷区-bfs

题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - B + - + - 坦克车只能水平或垂直方向上移动到相邻的区。 输入 输入第

m0_51955470的博客 264

[蓝桥杯2015决赛]穿越雷区(BFS求最短路)

题目描述X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。例如:A + - + -- + - - +- + + + -+ - + - +B + - + -坦克...

xiaoxiao66668的博客 181
上一篇: 动态规划详解(第一讲)
下一篇: HDU2064 汉诺塔III 递推做法
Neo_kh
博客等级 码龄9年 57粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值