题目描述:

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

代码展示:

#include<bits/stdc++.h>
using namespace std;
const int MAX=105;
char g[MAX][MAX];//用于存储地图
int res[MAX][MAX];//用于存储结果
bool vis[MAX][MAX];//用于标记是否走过
int n,x2,y2;//n为地图的大小,x2、y2分别为'B'的横纵坐标
int v1[4]={-1,0,1,0},v2[4]={0,-1,0,1};//用于进行上下左右操作
typedef pair<int,int>PII;//用于存储点的信息
void bfs(int x,int y){queue<PII>q;//由于传入的x,y是'A'的坐标,而不是'+'或'-'的坐标//故先将其周围的满足条件的'+'或'-'压入队列,并将其标记 for(int i=0;i<4;i++){if((x+v1[i]>=0)&&(x+v1[i]<n)&&(y+v2[i]>=0)&&(y+v2[i]<n)){q.push({x+v1[i],y+v2[i]});res[x+v1[i]][y+v2[i]]+=1;}}//只要队列非空,则弹出队首,将其标记 while(!q.empty()){PII start=q.front();q.pop();vis[start.first][start.second]=true;//对上下左右进行判断 for(int i=0;i<4;i++){int f=start.first+v1[i];int s=start.second+v2[i];//如果满足以下条件,则将其周围的点坐标压入队列,并进行相应的标记,结果数组相对应位置的路径长度加1 if((g[start.first][start.second]=='+')&&(g[f][s]=='-')&&vis[f][s]==false){vis[f][s]=true;res[f][s]=res[start.first][start.second]+1;q.push({f,s});}else if((g[start.first][start.second]=='-')&&(g[f][s]=='+')&&vis[f][s]==false){vis[f][s]=true;res[f][s]=res[start.first][start.second]+1;q.push({f,s});}//如果已经到达了'B',即终点 ,则结果数组相对应位置的路径长度加1,直接结束函数。 else if(g[f][s]=='B'){res[f][s]=res[start.first][start.second]+1;return; }}}
}
int main(){cin>>n;int x1,y1;//对地图进行初始化并记录下'A'和'B'的相应坐标 for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>g[i][j];if(g[i][j]=='A'){x1=i,y1=j;}if(g[i][j]=='B'){x2=i,y2=j;}}}bfs(x1,y1);//输出坦克从A区到B区的最少移动步数 cout<<res[x2][y2]<<endl;return 0;
}

[蓝桥杯2015决赛]穿越雷区相关推荐

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

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

  2. 1265: [蓝桥杯2015决赛]四阶幻方

    题目链接:1265: [蓝桥杯2015决赛]四阶幻方 题目描述 把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. 四阶幻方可能有很多方案.如果固 ...

  3. 蓝桥杯javaB组穿越雷区

    穿越雷区之javaBFS 本题为2015年第六届蓝桥杯javaB组第4题. 考点:图的广度优先搜索.类似于一个分层搜索的过程,广度优先搜索需要用到队列以保持访问过的图节点的顺序,一般用来求" ...

  4. 蓝桥杯2015决赛-方格填数-枚举 or dfs

    题目描述 在2行5列的格子中填入1到10的数字. 要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的. 如下图所示的2种,就是合格的填法. 请你计算一共有多少种可能的方案. 输出 请输出该整数 ...

  5. 第六届蓝桥杯国赛 穿越雷区

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

  6. [蓝桥杯2015决赛]奇怪的数列-双指针+模拟

    题目描述 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 - YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行&q ...

  7. [蓝桥杯2015决赛]机器人数目-枚举

    题目描述 少年宫新近邮购了小机器人配件,共有3类,其中, A类含有:8个轮子,1个传感器 B类含有: 6个轮子,3个传感器 C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子60 ...

  8. [蓝桥杯2015决赛]分机号-枚举(水题)

    题目描述 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位. 比如:751,520,321 都满足要求,而766,918,201 就不符合要求. 现 ...

  9. [蓝桥杯2015决赛]积分之迷-枚举(水题)

    题目描述 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单: 第一笔:3个A + 7个B + 1个C,共返积分:315 第二笔 ...

最新文章

  1. PyTorch训练加速17种技巧
  2. centos7 nat模式配置静态ip_Linux不进入网卡配置文件更改静态ip
  3. 2020教资高频考点作文素材汇总
  4. Hibernate逍遥游记-第2章-使用hibernate.properties
  5. 【dfs】树上游戏(P2664)
  6. Python Day25
  7. python 并发编程 多线程 守护线程
  8. 开源项目:RGB转BMP
  9. CSA FT1、FT2、FT4、FT5 和 FT6
  10. c#语言絢止函数是,取汉子拼音首字母的C#和VB.Net方法
  11. windows10下搜索磁盘神器 Listay
  12. DBF文件初步了解(二)——DBF数据导出代码实现
  13. 软件测试 | 测试方案怎么写
  14. for(int i:nums){.....}的含义
  15. win10系统怎么创建虚拟网卡?
  16. arduino安装+esp32+esp8266安装
  17. 梅尔倒谱分析MFCC
  18. HTML+CSS画圣诞树
  19. 尚硅谷Kubernetes(k8s)视频学习笔记
  20. Android AOA协议Android端 流程总结

热门文章

  1. Manifest 使用示例 - Msbuild 工程
  2. (六)Spring之回顾工厂模式
  3. 微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)
  4. 哈姆雷特与雷欧斯提的决斗
  5. 计算机用户名adm,adm那个电脑设置密码忘记了怎么处理
  6. 高效管理顾客体验,提升顾客转化的王牌选择
  7. 天禾云,校园云盘内部结构安全性/权限设置的剖析
  8. GitHub 标星 6
  9. 同样是做网站,为何你的不赚钱
  10. 行摄无疆——李元大师谈风光摄影圆满结束