蓝桥杯之穿越雷区 BFS

C#操作SQLite数据库帮助类——SQLiteHelper using System; using System.Collections.Generic; using System.Data.SQLite; using System.Data; namespace Com.ZCWL.Rock.Helper { public class SQLiteHelper { private static string connectionString = 阅读详情

本题为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;
}
扩散模型在工业缺陷检测中的应用与优化 扩散模型作为生成式AI的重要分支,通过逐步去噪的逆向过程实现高质量数据生成。其核心U-Net架构结合残差连接和时间步嵌入,特别适合处理工业场景中的细微缺陷检测。在计算机视觉领域,这种技术突破了传统深度学习模型对小样本数据的限制,通过域自适应预训练和小样本微调两阶段框架,显著提升金属表面、纺织品等复杂场景的检测准确率。关键技术实现涉及噪声调度优化、多任务损失设计等工程实践,最终在MVTec AD等工业数据集上达到90%以上的检测精度,为智能制造提供可靠的自动化质检方案。 阅读详情

相关推荐

AD7768与STM32F439的硬件设计避坑指南:如何优化高精度ADC系统的电源与PCB布局

本文详细解析了AD7768与STM32F439在高精度ADC系统硬件设计中的关键问题与优化方案。从电源系统设计、PCB布局到基准电压选型,提供了实用的避坑指南和实测数据,帮助工程师提升系统性能至110dB动态范围。特别强调了SPI信号布线和电源滤波对ADC精度的重要影响。

sugar的博客 735

蓝桥杯历届-穿越雷区

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

Kid_TH的博客 3215

伺服电机开发实战指南

伺服电机作为工业自动化的核心部件,正经历前所未有的技术革新。本文从基础原理出发,详细介绍了伺服电机的分类、工作原理和特性,分析了伺服电机系统组成与核心部件,探讨了企业级开发技术,包括控制算法、通信协议和故障诊断等高级功能,并提供了实战案例分析,从行业应用到具体开发步骤,展示了伺服电机的工程实现。通过深入理解伺服电机的原理、掌握开发技术、学习应用案例,可以实现伺服系统的高性能开发与应用。

全栈 1681

c++迷宫题解

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

frothmoon 2486

如何从零开始写小程序

看了这篇文章,即使让我现在就从头写一个能够正常运行的小程序,也没有原本想象中的那么难了。 在本文中,我们将会以一个具体的小程序为例,带领大家从零到一完成一个小程序的开发流程,并将这个小程序上传到 FinClip.com 进行小程序提审与上架操作。 我们新建了一个叫做「HelloWorld」的小程序,FIDE 在初始化小程序项目时,会自动在项目目录中补充对应所需要的项目文件。那不妨让我们先从小程序目录下的配置文件开始,逐渐揭开小程序的面纱。 使用 FIDE 编辑小程序 1. 认识 json 文件 在小程序项目

POHOU23的博客 4396

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

AUTOSAR架构下MCAL Modules软件分区问题分析

qq_36056498的博客 939

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

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

学习使我快乐_玉祥 479

锁的艺术:Java并发中的常用锁策略与实践

对java锁相关内容进行整理分析:乐观锁 VS 悲观锁+自旋锁 VS 适应性自旋锁+无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁+公平锁 VS 非公平锁+可重入锁 VS 非可重入锁+独享锁 VS 共享锁

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 171万+

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

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

kawhi的博客 541

华为OD机试真题2025双机位B卷 Java&Go 实现【朋友圈个数】

给定一组朋友关系,统计一下该朋友关系网中的朋友圈个数。 朋友圈的定义:一个朋友圈至少由3个朋友组成,且要求同一个朋友圈中的任意两个人都具有直接的朋友关系。 输入描述 输入一个朋友关系列表,如 Fiends =A.B],[A.C],IB,DI,其中的每一个元素 Friendsi表示 Friends[i][0)和 Friends [i][1] 是朋友关系 先输入一个数字 N 代表关系的总数,后面每条关系一行,两个成员以逗号分隔

MISAYAONE的博客 520

rk3588 适配音频解码芯片 ALC5616

在 RK3588 的高性能方案中,选择 **ALC5616**(来自 Realtek 瑞昱)通常意味着项目更侧重于**音频性能的稳定性**以及**全球供应链的通用性**。

weixin_35723192的博客 145

穿越雷区C++

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

weixin_51160138的博客 867

地球引擎初级教程:Python API 的安装和介绍

地球引擎的 Python API 提供了许多功能和工具,用于访问和处理地理空间数据。连接到地球引擎在编写地球引擎的 Python 脚本时,首先需要连接到地球引擎服务器。import ee # 初始化地球引擎 ee . Initialize()这将初始化地球引擎并建立与服务器的连接。加载和显示图像使用地球引擎的 Python API,您可以加载和显示卫星图像。import ee# 初始化地球引擎# 加载 Landsat 8 影像# 显示影像print('影像 URL:', url)

UePostscript的博客 1008

蓝桥杯 穿越雷区(bfs)

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

weixin_34041003的博客 161

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

hyoka的博客 321

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

2403_86817891的博客 1041

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

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

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

余额充值