[蓝桥杯2015决赛]穿越雷区(BFS求最短路)
题目描述
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?
已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
坦克车只能水平或垂直方向上移动到相邻的区。
输入
输入第一行是一个整数n,表示方阵的大小, 4<=n<100
接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。
输入保证A,B都只出现一次。
输出
要求输出一个整数,表示坦克从A区到B区的最少移动步数。
如果没有方案,则输出-1
样例输入 Copy
5
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
样例输出 Copy
10
思路:也就利用bfs,要穿越不同的雷区,-,+,所以也就相当于当前的这个的值不和前面穿过的一个值相同。1 #include <iostream>
2 #include <queue>
3 using namespace std;
4 constexpr size_t maxn = 2005;
5 struct node{
6 int x,y;
7 int last;
8 int step;
9 node(int x, int y, int last):x(x), y(y), last(last),step(0){}
10 };
11 bool book[maxn][maxn];
12 int s1, s2, n;
13 int mp[maxn][maxn];
14 int ans;
15 queue<node> q;
16 bool judge(int x, int y)
17 {
18 return x >= 0 && x < n && y >= 0 && y < n;
19 }
20 void bfs(){
21
22 while(q.size()){
23 node p = q.front();
24 q.pop();
25 if(mp[p.x][p.y] == 4){
26 cout << p.step << endl;
27 return;
28 }
29
30 for(int i = -1; i <= 1; ++ i){
31 for(int j = -1; j <= 1; ++ j){
32 if(abs(i) == abs(j))continue;
33 node p2 = p;
34 p2.x = p2.x + i;
35 p2.y = p2.y + j;
36 if(judge(p2.x,p2.y) && !book[p2.x][p2.y] && p2.last != mp[p2.x][p2.y]){
37 p2.last = mp[p2.x][p2.y];
38 p2.step++;
39 book[p2.x][p2.y] = true;
40 q.push(p2);
41 }
42 }
43 }
44
45 }
46 cout << -1 << endl;
47 }
48
49
50
51 int main(){
52
53 char a;
54 cin >> n;
55
56 for(int i = 0; i < n; ++ i){
57 for(int j = 0; j < n; ++ j){
58 cin >> a;
59 if(a == 'A'){
60 mp[i][j] = 3;
61 s1 = i, s2 = j;
62 }
63 if(a == 'B')
64 mp[i][j] = 4;
65 if(a == '-')
66 mp[i][j] = 0;
67 if(a == '+')
68 mp[i][j] = 1;
69 }
70 }
71 q.push({s1,s2,3});
72 book[s1][s2] = true;
73 bfs();
74 }
[蓝桥杯2015决赛]穿越雷区(BFS求最短路)的更多相关文章
- [蓝桥杯2015决赛]四阶幻方(DFS + 剪枝)
题目描述 把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. 四阶幻方可能有很多方案.如果固定左上角为1,请计算一共有多少种方案. 比如: 1 ...
- 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。
这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
- UVa 816 (BFS求最短路)
/*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (cons ...
- BFS求最短路
假设有一个n行m列的迷宫,每个单位要么是空地(用1表示)要么是障碍物(用0表示).如和找到从起点到终点的最短路径?利用BFS搜索,逐步计算出每个节点到起点的最短距离,以及最短路径每个节点的前一个节点. ...
- UVA 816 -- Abbott's Revenge(BFS求最短路)
UVA 816 -- Abbott's Revenge(BFS求最短路) 有一个 9 * 9 的交叉点的迷宫. 输入起点, 离开起点时的朝向和终点, 求最短路(多解时任意一个输出即可).进入一个交叉 ...
- 6.4.2 用BFS求最短路
前面的篇幅占了太多,再次新开一章,讲述BFS求最短路的问题 注意此时DFS就没有BFS好用了,因为DFS更适合求全部解,而BFS适合求最优解 这边再次提醒拓扑变换的思想在图形辨认中的重要作用,需要找寻 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- 利用BFS求最短路
利用BFS求图的最短路, POJ3984 #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<string.h& ...
随机推荐
- Git - 05. git log & git show
1. 概述 有了提交, 就必须有日志 日志用处很多, 这里我就不多说了 2. 项目日志 概述 查看当前分支的 提交记录 命令 普通查看 命令 > git log 显示 commit id 包括 ...
- 【PAT甲级】1107 Social Clusters (30分)(非递归并查集)
题意: 输入一个正整数N(<=1000),表示人数,接着输入N行每行包括一个他的爱好数量:和爱好的序号.拥有相同爱好的人们可以默认他们在同一个俱乐部,输出俱乐部的数量并从大到小输出俱乐部的人数( ...
- py1
python 下载安装 https://python.org python解释性语言 python数据结构 *输入输出 print(12,34,56,end='',sep='*') input() ...
- python实现获取电脑IP、主机名、Mac地址
import socket import uuid # 获取主机名 hostname = socket.gethostname() #获取IP ip = socket.gethostbyname(ho ...
- pwnable.kr-flag-Writeup
MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...
- JS-常用方法合集
部分方法使用jQuery!!!//tab切换 /* * 参数tablist为触发事件id * 参数tabmain为执行切换id * 参数ev为触发事件的动作 */ function tab(tabli ...
- ZOJ1002 —— 深度优先搜索
ZOJ1002 —— Fire net Time Limit: 2000 ms Memory Limit: 65536 KB Suppose that we have a square city wi ...
- python web django base skill
web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...
- python 在linux上面安装beautifulsoup4(bs4) No module named 'bs4'
续费了我的服务器 重做系统成了Linux服务器 然后想把Windown上的Python脚本放上去运行 但是出现了 No module named 'bs4' 的问题 pip install bs4 试 ...
- TensorFlow 模型的保存与载入
参考学习博客: # https://www.cnblogs.com/felixwang2/p/9190692.html 一.模型保存 # https://www.cnblogs.com/felixwa ...