穿越雷区第六届蓝桥杯大赛个人赛决赛(C语言A组)第四题
标题:穿越雷区
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
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
分析:DFS题目,判断的时候只需要判断要走的点的字符与上一点的字符是否相同即可。
代码如下:
#include <stdio.h>
#include <string.h>
#define INF 1<<30
char map[105][105];
int dir[4][2]={-1,0,0,1,1,0,0,-1};
int n;
int vis[105][105];
int min=INF;
int f_x,f_y;
void dfs(int x,int y,int t,char ch)
{if(x<=0 || x>n || y<=0 || y>n)return ;if(x==f_x && y==f_y){if(t<min)min=t;return ;}for(int k=0;k<4;k++){int px=x+dir[k][0],py=y+dir[k][1];if(!vis[px][py] && map[px][py]!=ch){vis[px][py]=1;dfs(px,py,t+1,map[px][py]);vis[px][py]=0;}}
}int main()
{int i,j;int s_x,s_y;memset(map,0,sizeof(map));memset(vis,0,sizeof(vis));scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%*c%c",map[i]+j);if(map[i][j]=='A'){//开始点 s_x=i;s_y=j;}else if(map[i][j]=='B'){//终止点 f_x=i;f_y=j;}}}vis[s_x][s_y]=1;dfs(s_x,s_y,0,map[s_x][s_y]);if(min==INF)printf("-1");elseprintf("%d\n",min);return 0;
}
穿越雷区第六届蓝桥杯大赛个人赛决赛(C语言A组)第四题相关推荐
- 第六届蓝桥杯大赛个人赛决赛(C/C++大学B组)
第六届蓝桥杯大赛个人赛决赛(C/C++大学B组) 第一题 积分之迷(15分) 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单 ...
- 第六届蓝桥杯大赛个人赛省赛Java B组真题
文章目录 第六届蓝桥杯大赛个人赛省赛Java B组真题 1. 三角形面积(结果填空) 2. 立方自变身(结果填空) 3. 三羊献瑞(结果填空) 4. 循环节长度(代码填空) 5. 九数组分数(代码填空 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类) C++A组真题题解
文章目录 题目链接 A组真题 题目结构 第一题 方格填数 第二题 四阶幻方 第三题 显示二叉树 第四题 穿越雷区 第五题 切开字符串 第六题 铺瓷砖(待补) 题目链接 A组真题 题目结构 题目 类型 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题-Java语言B组
目录 1.分机号 2.五星填数 3.显示二叉树 4.穿越雷区 5.表格计算 6.铺瓷砖 1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题 Java语言B组 答案
标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题
分号机 import java.io.IOException; class MC{public void run(){int cnt = 0;for (int i = 9; i >= 0; i- ...
- 第六届蓝桥杯大赛省赛C语言B组-填空题-星系炸弹(Java实现)
星系炸弹 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸. 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2 ...
- 蓝桥杯评分标准_2015-第六届蓝桥杯大赛个人赛省赛(软件类)真题 C大学B组
题目一览: 1.奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动 ...
- 第六届蓝桥杯大赛省赛C语言B组-填空题-奖券数目(Java实现)
奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位 ...
最新文章
- Java做爬虫也很牛
- IntelliJ IDEA 常用设置
- MySQL中地理位置数据扩展geometry的使用心得
- C++ int转string的几种方法比较
- 【转】DB2学习路线
- mac apache服务器
- hashmap containsvalue时间复杂度_不看看HashMap源码,怎么和面试官谈薪资
- 延时电路c语言程序,rc延时电路工作原理
- Qemu复现雄迈摄像头固件漏洞
- 数据分析2——核心思维技巧
- 第6章 垃圾邮件识别
- 跟领导汇报工作时,这句话建议你不要说
- Ubuntu20.04 用 `hwclock` 或 `timedatectl` 设置RTC硬件时钟为本地时区
- 杭州旭航集团,申请纳斯达克IPO上市,募资9800万美元
- 卡特兰数——Catalan数
- 解读两篇最新多元时间序列预测工作
- 青竹画材创业板IPO被终止:年营收4.15亿 文投基金是股东
- 什么是WordPress
- 推荐一款不错的 Go 持续分析工具
- 【自动聚焦】显微镜的景深