蓝桥杯历届-穿越雷区


标题:穿越雷区

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


典型的dfs思路即可,数据不是太大,可以过!


#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int MAX_N = 101;
char s[MAX_N][MAX_N];
int book[MAX_N][MAX_N];
int N, startX, startY, endX, endY;
int MIN1 = 99999;
bool f;
int C = 0;
int next[4][2] = {{0, 1},{1, 0},{0, -1},{-1, 0}
};
int getX(char c) {for (int i = 0; i< N; i++) {for (int j = 0; j < N; j++) {if (s[i][j] == c) return i;}}
}
int getY(char c) {for (int i = 0; i< N; i++) {for (int j = 0; j < N; j++) {if (s[i][j] == c) return j;}}
}
void dfs(int x, int y, int step) {// 四种走法 上下左右 for (int i = 0; i < 4; i++) {int tx = x + next[i][0];int ty = y + next[i][1];// 判断是否越界 if (tx < 0 || tx > N || ty < 0 || ty > N) continue;// 判断交替 if (s[x][y] == '+') f = true;else if (s[x][y] == '-') f =  false;if (tx == endX && ty == endY) {// 更新最小值if (step < MIN1) MIN1 = step;return; //返回 }// 判断是否是障碍物或者已经走过 if (f && C > 0) {if (book[tx][ty] == 0 && s[tx][ty] == '-') {C++;book[tx][ty] = 1;dfs(tx, ty, step+1);book[tx][ty] = 0;}} else if(!f && C > 0){if (book[tx][ty] == 0 && s[tx][ty] == '+') {C++;book[tx][ty] = 1;dfs(tx, ty, step+1);book[tx][ty] = 0;}} else {if (book[tx][ty] == 0) {C++;book[tx][ty] = 1;dfs(tx, ty, step+1);book[tx][ty] = 0;}}}
}
int main() {freopen("in.txt", "r", stdin);scanf("%d", &N);getchar();for (int i = 0; i< N; i++) {for (int j = 0; j < N; j++) {scanf("%c", &s[i][j]);getchar();}}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) book[i][j] = 0;}startX = getX('A');startY = getY('A');endX = getX('B');endY = getY('B');book[startX][startY] = 1;dfs(startX, startY, 1);if (MIN1 == 99999) MIN1 = -1;cout << MIN1 << endl;return 0;
}

蓝桥杯历届-穿越雷区相关推荐

  1. 蓝桥杯之穿越雷区 BFS

    本题为2015年第六届蓝桥杯C语言A组试题,第4题. 考点:广度优先搜索(BFS) 广搜一般用来解决"最短""最少"问题,需用到队列. 题目描述 标题:穿越雷区 ...

  2. 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述

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

  3. 蓝桥杯:穿越雷区——DFS

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

  4. 蓝桥杯_穿越雷区 java

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

  5. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)

    问题 1435: [蓝桥杯][历届试题]国王的烦恼 时间限制: 1Sec 内存限制: 128MB 提交: 802 解决: 213 题目描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了 ...

  6. 蓝桥杯 - 历届试题 - 日期问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_33531813/article/details/79516258 </div>&l ...

  7. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  8. 二分搜索,POJ2456,NYOJ 914, 区间移位-蓝桥杯-历届试题

    二分搜索是不断缩减可能解的范围来得到最优解, 因为每次是折半, 所以指数爆炸有多快,这个效率就有多高 POJ2456为例, 传送门 简而言之, 就是将牛之间的距离的最小值最大化. #include&l ...

  9. 蓝桥杯历届试题代码参考

    蓝桥杯历届试题代码参考 历届试题 核桃的数量 打印十字图 带分数 剪格子 错误票据 翻硬币 连号区间数 买不到的数目 大臣的旅费 幸运数 横向打印二叉树 危险系数 网络寻路 高僧斗法 格子刷油漆 农场 ...

最新文章

  1. ASP.NET图象处理详解
  2. 2 行代码,将 .NET 执行时间降低 87%!
  3. 免费公开课 | 机器学习的第二次入门
  4. MATLAB_10-模式识别_
  5. 3.playbook基础
  6. java8 内存模型_java8内存模型
  7. GCC 关键字inline探究
  8. boost::ptr_list相关的测试程序
  9. 面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等
  10. 前端学习(2843):UI插件开发
  11. php生成饼状图 柱形图,求一个饼状图或柱状图php生成类或例子
  12. [FFmpeg] RGBA 和 YUV 存储方式
  13. C语言小程序——验证哥德巴赫猜想
  14. Multisim12使用记录
  15. 杨辉三角 java版
  16. python sleep函数什么意思_python中sleep函数用法实例分析
  17. Python str函数
  18. arm服务器的芯片编年史,64位ARM新篇章 历数史上经典64位处理器
  19. 写给新人程序猿的15点建议:苦逼程序员的辛酸反省与总结
  20. 基于AD9854个和MSP430的波形发生器

热门文章

  1. 内容安全校验—DFA算法的简单使用
  2. CSS3 3D移动(translate3d)、透视(perspective)、3D旋转(rotate3d)、3D呈现(transform-style)
  3. Flash + After Effects
  4. windows 7无法访问ubuntu samba共享文件
  5. 骨密度中android区域,基于Android平台的超声骨密度测试系统的设计与实现
  6. 高低温霍尔效应测试系统
  7. java获取时间间隔,获取当天每隔15分钟的时间
  8. python安装库的方法
  9. JAVA Excel导入数据,存在数字类型、日期类型格式问题解决
  10. linux 桌面缩放比例,Linux Mint 20 Cinnamon 4.6桌面环境添加分数比例缩放支持