赞
踩
题目描述:
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?
已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
坦克车只能水平或垂直方向上移动到相邻的区。
代码:
- package lanqiao;
-
- import java.util.*;
-
- public class Main {
- public static char[][] map = new char[101][101];
- public static int[][] vis = new int[101][101];
- public static int n,Ax,Ay;
- public static int cnt = 10001;
- public static void dfs(int x,int y,int num)
- {
- if(num >= cnt){
- return;
- }
- if(map[x][y] == 'B')
- {
- cnt = num;
- return;
- }
- vis[x][y] = 1;
- if(x-1>=1&&vis[x-1][y]!=1&&map[x][y]!=map[x-1][y]){
- dfs(x-1,y,num+1);
- }
- if(x+1>=1&&vis[x+1][y]!=1&&map[x][y]!=map[x+1][y]){
- dfs(x+1,y,num+1);
- }
- if(y-1>=1&&vis[x][y-1]!=1&&map[x][y]!=map[x][y-1]){
- dfs(x,y-1,num+1);
- }
- if(y+1>=1&&vis[x][y+1]!=1&&map[x][y]!=map[x][y+1]){
- dfs(x,y+1,num+1);
- }
- vis[x][y] = 0;
- }
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- n = sc.nextInt();
- for(int i = 1;i <= n;i ++)
- {
- for(int j = 1;j <= n;j ++)
- {
- map[i][j] = sc.next().charAt(0);
- if(map[i][j] == 'A'){
- Ax = i;
- Ay = j;
- }
- }
- }
- dfs(Ax,Ay,0);
- if(cnt == 10001)
- {
- System.out.println(-1);
- }else{
- System.out.println(cnt);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。