蓝桥杯之穿越雷区 BFS

k8s 查看cpu使用率最高的pod 在 Kubernetes 中,可以使用命令查看 Pod 的资源使用情况,从而找到 CPU 使用率最高的 Pod。 阅读详情

本题为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;
}
【华为OD机试真题】65、高矮个子排队 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS) 题目描述 >现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 >  我们现在希望小朋友排队,以"高" "矮" "高" "矮" 顺序排列,每一个高位置的小朋友要比相邻的位置高或者相等;每个 "矮" 位置的小朋友要比相邻的位置矮或者相等; >  要求小朋友们移动的距离和最小,第一个从“高"位开始排,输出最小移动距离即可。 >  例如,在示范小队{5,3,1,2,3}中, {5, 1, 3, 2, 3}是排序结果。 >  阅读详情

相关推荐

如何读懂CiteSpace图谱?科研小白必看的节点颜色/年轮/聚类解读手册

本文详细解析CiteSpace图谱的核心视觉元素,包括节点颜色、年轮和聚类标识,帮助科研人员准确解读数据分析结果。通过生物医学案例展示如何从图谱中识别关键文献和研究趋势,提供五步系统解读法和常见错误规避策略,助力科研小白快速掌握文献计量分析技巧。

weixin_29179311的博客 318

蓝桥杯历届-穿越雷区

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

Kid_TH的博客 3215

WinForm多语言切换实战:5分钟搞定中英文界面(附完整代码)

本文提供了WinForm应用实现中英文界面切换的两种高效实战方案。通过利用内置的本地化机制和资源文件,开发者可以在5分钟内为窗体添加多语言支持,并附有完整代码示例,帮助快速应对软件国际化需求。

weixin_29230773的博客 406

c++迷宫题解

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

frothmoon 2486

Zemax操作16--激光谐振腔(含晶体)

谐振腔(含晶体)

lzy750750的博客 8319

笔记——Oracle19c

Oracle阅读笔记

weixin_63819458的博客 1351

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

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

学习使我快乐_玉祥 479

【图文步骤】EC-Engineer部分操作详细步骤

EC-Engineer部分功能详细使用手册

weixin_42212468的博客 6173

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

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

kawhi的博客 541

双屏DPI缩放问题全解析:从原理到实战解决窗口大小突变

DPI(每英寸点数)缩放是现代操作系统在多显示器环境下实现界面适配的核心技术。其原理是通过虚拟分辨率映射,在不同物理像素密度的屏幕上维持一致的视觉尺寸。这项技术的价值在于解决了高分辨率屏幕显示内容过小的问题,保障了跨屏工作流的视觉连续性。然而,在混合DPI环境(如4K屏与1080p屏组合)中,显卡驱动逻辑与应用程序DPI感知的协同问题,常导致窗口跨屏时出现剧烈缩放、尺寸错乱。这直接影响多屏办公、设计协作等需要频繁拖拽窗口的应用场景。本文聚焦于**显卡驱动**配置与**应用程序兼容性**设置,提供一套从系统底

weixin_34364071的博客 388

华为数通方向HCIP-DataCom H12-831题库(多选题:121-140)

华为数通HCIP H12-831多选题

didiplus 1291

穿越雷区C++

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

weixin_51160138的博客 867

Python 爬虫实战:豆瓣电影海报批量获取(Top250 榜单 + 可视化展示)

在信息爆炸的时代,数据已成为决策的核心,而数据的获取是数据分析的第一步。本文将详细介绍如何利用 Python 爬虫获取豆瓣电影 Top250 榜单的海报,并对数据进行可视化展示,助你更好地了解电影市场的趋势和用户的喜好。

yansideyucsdn的博客 719

蓝桥杯 穿越雷区(bfs)

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

weixin_34041003的博客 161

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

hyoka的博客 321

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

2403_86817891的博客 1041

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

穿越雷区(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、付费专栏及课程。

余额充值