蓝桥杯 穿越雷区
2016-05-21 10:23
363 查看
题目:
标题:穿越雷区
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
思路:数据量不大。 递归,走迷宫
标题:穿越雷区
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
思路:数据量不大。 递归,走迷宫
#include<iostream> using namespace std; char map[110][110]; int vis[110][110],n,sum=1000000; void dfs(int cur,int x,int y) { if(cur>=sum) return; if(map[x][y]=='B') { sum=cur; return; } vis[x][y]=1; if((x-1)>=0&&vis[x-1][y]==0&&(map[x][y]!=map[x-1][y])) { dfs(cur+1,x-1,y); } if((y-1)>=0&&vis[x][y-1]==0&&(map[x][y]!=map[x][y-1])) { dfs(cur+1,x,y-1); } if((x+1)>=0&&vis[x+1][y]==0&&(map[x][y]!=map[x+1][y])) { dfs(cur+1,x+1,y); } if((y+1)>=0&&vis[x][y+1]==0&&(map[x][y]!=map[x][y+1])) { dfs(cur+1,x,y+1); } vis[x][y]=0; } int main() { cin>>n; int x,y; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>map[i][j]; if(map[i][j]=='A') { x=i;y=j; } } } dfs(0,x,y); if(sum==1000000) cout<<-1<<endl; else cout<<sum<<endl; return 0; }
相关文章推荐
- NYOJ 120 校园网络
- caffe学习笔记(5):层的特征可视化
- 另一种遍历Map的方式: Map.Entry 和 Map.entrySet()
- 适配器模式
- Apue学习:高级I/O
- JavaWeb的学习总结(三)— 过滤器(Filter)
- 1:git安装及创建仓库
- 00015:小X 学游泳
- 计算几何常用算法总结
- Struts2之文件上传与下载
- 代理服务器的用途
- 百度地图API的Android开发之申请秘钥
- MAX232和PL2303、CH340的区…
- 使用request.js时遇到的url编码问题
- USB2.0通讯协议
- labview中应用的一些小操作
- c#窗体控件datagriview与dataset的运用:修改,新增,删除,查找,保存,更新
- 转:Labview中引用,属性节点,局…
- matlab中方程求解的基本命令
- 图解Win7下set命令使用