zoukankan      html  css  js  c++  java
  • 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
    
    资源约定:
    峰值内存消耗(含虚拟机) < 512M
    CPU消耗  < 2000ms
    
    
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。
    
    
    // 深搜
    import java.util.Scanner;
     
    public class Main {
    	// 下一步的方向,分别为:上,下,左,右
    	static int[][] dir = { { 0, -1 }, { 0, 1 }, { -1, 0 }, { 1, 0 } };
    	// 答案
    	static int ans = Integer.MAX_VALUE;
     
    	public static void main(String[] args) {
    		Scanner s = new Scanner(System.in);
    		int n = s.nextInt();
    		String[][] map = new String[n][n];
    		// 1代表访问过,0代表未访问过
    		int[][] visit = new int[n][n];
    		// A的行号
    		int x = 0;
    		// A的列号
    		int y = 0;
    		for (int i = 0; i < map.length; i++) {
    			for (int j = 0; j < map[i].length; j++) {
    				map[i][j] = s.next();
    				if (map[i][j].equals("A")) {
    					x = i;
    					y = j;
    				}
    			}
    		}
    		dfs(map, visit, x, y, 0);
    		System.out.println(ans);
    		s.close();
    	}
     
    	public static void dfs(String[][] map, int[][] visit, int row, int col, int step) {
    		if (map[row][col].equals("B")) {
    			if (step < ans)
    				ans = step;
    			return;
    		}
    		visit[row][col] = 1;
    		for (int i = 0; i < dir.length; i++) {
    			// 下一步行号
    			int nextRow = row + dir[i][0];
    			// 下一步列号
    			int nextCol = col + dir[i][1];
    			if (nextRow < 0 || nextRow >= map.length || nextCol < 0 || nextCol >= map.length)
    				continue;
    			if (visit[nextRow][nextCol] == 0) {
    				visit[nextRow][nextCol] = 1;
    				if (!map[nextRow][nextCol].equals(map[row][col]))
    					dfs(map, visit, nextRow, nextCol, step + 1);
    				// 回溯
    				visit[nextRow][nextCol] = 0;
    			}
    		}
    	}
    }
    
  • 相关阅读:
    数据库架构的演变
    一个简单的跨库事务问题
    一个优美的架构需要考虑的几个问题
    铁道部新客票系统设计
    详细介绍软件架构设计的三个维度
    单代号网络图
    分库分表带来的完整性和一致性问题
    软件架构设计箴言理解
    设计高并发的电子商店
    mysql之索引补充
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947438.html
Copyright © 2011-2022 走看看