题目描述
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<iostream>
#include<queue> using namespace std; struct node
{
char ch; // 该坐标处的字符
int x, y; // 在地图上的坐标
int step; // 步数(层数)
}nod; char mp[][];
int vis[][];
int dx[] = {,-,,};
int dy[] = {,,,-};
int n;
int start_x, start_y;
int flag = ; void bfs(int x, int y)
{
vis[x][y] = ;
queue<node>Q;
nod.step = ;
nod.x = x;
nod.y = y;
nod.ch = 'A';
Q.push(nod); node t, p;
while(!Q.empty())
{
t = Q.front();
Q.pop(); if(t.ch == 'B')
{
flag = ;
cout << t.step << endl;
return;
} for(int i = ; i < ; ++i)
{
int xx = t.x + dx[i];
int yy = t.y + dy[i]; if(xx >= && yy >= && xx < n && yy < n && !vis[xx][yy] && mp[xx][yy] != t.ch) // 这一层的字符不能和前一层的一样,否则坦克会报废
{
p.ch = mp[xx][yy];
p.x = xx;
p.y = yy;
p.step = t.step + ;
Q.push(p);
}
} } cout << - << endl; // 队列已经空了仍然没有找到方案,则输出-1 } int main()
{
cin >> n;
for(int i = ; i < n; ++i)
for(int j = ; j < n; ++j)
{
cin >> mp[i][j];
if(mp[i][j] == 'A')
{
start_x = i;
start_y = j;
}
} bfs(start_x, start_y); return ;
}

 

蓝桥杯 穿越雷区(bfs)的更多相关文章

  1. java实现第六届蓝桥杯穿越雷区

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

  2. 蓝桥杯 卡片换位(bfs)

    卡片换位 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵.还有一个格子是空着的. 你可以把一张牌移动到相邻的空 ...

  3. 蓝桥杯 调手表(bfs解法)

    小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时 ...

  4. 蓝桥杯比赛关于 BFS 算法总结方法以及套路分析

    首先我们来看几道java A组的题目,都是同一年的哦!!! 搭积木 小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9. 搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面 ...

  5. 蓝桥杯---剪格子(DFS&BFS)(小总结)

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...

  6. 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)

    Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...

  7. 算法笔记_208:第六届蓝桥杯软件类决赛真题(Java语言A组)

    目录 1 胡同门牌号 2 四阶幻方 3 显示二叉树 4 穿越雷区 5 切开字符串 6 铺瓷砖   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 胡同门牌号 标题:胡同门牌号 小明家住在一条胡同里. ...

  8. 2015年第六届蓝桥杯国赛试题(JavaA组)

    1.结果填空 (满分15分)2.结果填空 (满分35分)3.代码填空 (满分31分)4.程序设计(满分41分)5.程序设计(满分75分)6.程序设计(满分103分) 1.标题:胡同门牌号 小明家住在一 ...

  9. 第六届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...

随机推荐

  1. (八) Usb摄像头描述符解析

    目录 Usb摄像头描述符解析 总结 参考资料 打印设备描述符 打印配置描述符 打印接口联合体描述符 打印接口描述符 打印当前设置的额外描述符 代码解析额外的描述符 打印端点描述符 title: Usb ...

  2. Ubuntu屏幕分辨率无1920 1080

    xrandr 没有1920X1080分辨率,所以手动添加一个1080P分辨率,先输入“cvt 1920 1080”命令,查询一下1080P分辨率的有效扫描频率 然后 sudo xrandr --new ...

  3. 实现Map接口(hash原理)

    闲来无事,就实现一个简单的map来练练手吧! HashMap的底层实现主要是基于数组和链表来实现的,HashMap中通过key的hashCode来计算hash值的,由这个hash值计算在数组中的位置, ...

  4. Angular4.x学习日志

    码云链接:https://gitee.com/ccsoftlucifer/Angular4Study 1.部署环境 安装nodejs 安装angular脚手架程序 2.创建工程 ng new  项目名 ...

  5. file 多次上传附件功能完善

    之前解决了一个页面中的单个附件上传问题,使用的是 id 定位.但是一个页面中,可能存在多个附件上传的地方,这时候如果继续使用 id,会出问题. 我依旧会上传一个附件.附件链接地址: https://f ...

  6. centos备份多个数据库

    #/bin/bash# the backup dateDATE=`date +%Y%m%d%H%M`#backup pathBACKUP_PATH=/home/backup/mysqldata#get ...

  7. luogu P5322 [BJOI2019]排兵布阵

    传送门 普及dp 设\(f_{i,j}\)表示前\(i\)个城堡,用\(j\)人的最大价值,转移枚举一个对手,如果这个对手在\(i\)这个城堡人数是第\(k\)小的,那么用\(2a_i+1\)人可以得 ...

  8. Eclipse使用Git检出项目

    1.打开Eclipse——File——Import...: 2.在弹出的Import框中选择Git——Projects from Git——NEXT: 3.选择Clone URI——Next: 4.输 ...

  9. Flask-Web开发(第一部分)

    1.Jinja2变量过滤器: safe 渲染值时不转义capitalize 把值的首字母转换成大写,其他字母转换成小写lower 把值转换成小写形式upper 把值转换成大写形式title 把值中每个 ...

  10. verdi\debussy的使用技巧

    verdi\debussy的使用技巧 转载from 大西瓜FPGA 大西瓜FPGA-->https://daxiguafpga.taobao.com fsdb display Debussy本身 ...