java 蓝桥杯 穿越雷区
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
import java.util.*;public class Main
{static int n,count=-1,k[][],x,y;public static void main(String args[]){Scanner cn=new Scanner(System.in);n=cn.nextInt();k=new int[n][n];boolean t[][]=new boolean [n][n];for(int i=0;i<n;i++)for(int j=0;j<n;j++){String r=cn.next(); //A记做3 +为1 -为0 B为4if(r.equals("A")){x=i;y=j;k[i][j]=3;t[i][j]=true;}else if(r.equals("B"))k[i][j]=4;else if(r.equals("+"))k[i][j]=1;else if(r.equals("-"))k[i][j]=0;}long t1=System.currentTimeMillis();dd(x,y,0,t); //位置 步数long t2=System.currentTimeMillis();System.out.println(count);System.out.println("耗时:"+(t2-t1));}public static void dd(int q,int w,int step,boolean t[][]){if(k[q][w]==4){if(count==-1)count=step;else if(count>step)count=step;return;}if(step>count&&count!=-1)return;//上走 保证不在第一行 同时下一步的位置没有走过 同时避免++ 和--(即1+1=2和0+0=0)if(q!=0&&t[q-1][w]!=true&&k[q][w]+k[q-1][w]!=0&&k[q][w]+k[q-1][w]!=2) { t[q-1][w]=true;dd(q-1,w,step+1,t);t[q-1][w]=false;} //回溯法的关键//下走if(q!=n-1&&t[q+1][w]!=true&&k[q][w]+k[q+1][w]!=0&&k[q][w]+k[q+1][w]!=2){ t[q+1][w]=true;dd(q+1,w,step+1,t);t[q+1][w]=false;}//左走if(w!=0&&t[q][w-1]!=true&&k[q][w]+k[q][w-1]!=0&&k[q][w]+k[q][w-1]!=2){ t[q][w-1]=true;dd(q,w-1,step+1,t);t[q][w-1]=false;}//右走if(w!=n-1&&t[q][w+1]!=true&&k[q][w]+k[q][w+1]!=0&&k[q][w]+k[q][w+1]!=2) { t[q][w+1]=true;dd(q,w+1,step+1,t);t[q][w+1]=false;}return;}
}
java 蓝桥杯 穿越雷区相关推荐
- java实现第六届蓝桥杯穿越雷区
穿越雷区 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能 ...
- 蓝桥杯 穿越雷区(bfs)
题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...
- bfs 蓝桥杯 穿越雷区 python
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地 ...
- Java 蓝桥杯 我们的征途是星辰大海
Java 蓝桥杯 我们的征途是星辰大海 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表空地,curiosity可以穿过它 '#' 代 ...
- 标题 日期问题java蓝桥杯,日期类的使用(java)-蓝桥杯
蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...
- java蓝桥杯练习 学做菜
java蓝桥杯练习 学做菜 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 涛涛立志要做新好青年,他最近在学做菜.由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜, ...
- java蓝桥杯练习 蜜蜂飞舞
java蓝桥杯练习 蜜蜂飞舞 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 "两只小蜜蜂呀,飞在花丛中呀--" 话说这天天上飞舞着两只蜜蜂,它们在跳一种奇怪的舞 ...
- JAVA 蓝桥杯 算法提高 阮小二买彩票
JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...
- java蓝桥杯练习 拉马车
java蓝桥杯练习 拉马车 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小的时候,你玩过纸牌游戏吗? 有一种叫做"拉马车"的游戏,规则很简单,却很吸引小朋友. ...
最新文章
- Spring Cloud Greenwich版本已发布!
- matlab 最小二乘法拟合_机器学习十大经典算法之最小二乘法
- 基础回顾(Map、==/equals()/hashcode())
- python绘制彩色地震剖面_在地图上绘制饼图时“爆炸”楔形图(Python,matplotlib)...
- 充电枪cp信号控制板_比亚迪E5无法交流充电故障检修
- Q:判断链表中是否存在环的相关问题
- 公差基本偏差代号_基本偏差代号公差等级代号.ppt
- 开心网之开心餐厅游戏分析报告
- UE激活(亲测有效,通过注册机激活)
- Chrome google浏览器从缓存下载视频
- [鼠标指针][仅需1步]宝藏的猫咪Cat老师[win10/11][点击看更多免费]......
- 小米硬盘路由器服务器,小米路由零售版699元 1T硬盘定位家庭服务器
- 安防想要抢食智能家居大蛋糕 应该如何转型?
- 移动游戏的新推广模式
- C语言经典题目:有5个人坐在一起,问他们分别多少岁?
- The error may exist in com/kuang/dao/UserMapper.xml
- 数据爬取——拍信网美女图片
- 抓取淘宝购物车数据以及足迹数据
- Android SDK 详解
- 在reportlab中,如果设置字符间距?