本文主要是介绍题目 1825: 蓝桥杯-穿越雷区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
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);}}
}
这篇关于题目 1825: 蓝桥杯-穿越雷区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!