当前位置:   article > 正文

题目 1825: 蓝桥杯-穿越雷区

题目 1825: 蓝桥杯-穿越雷区

题目描述:

X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?

已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -

坦克车只能水平或垂直方向上移动到相邻的区。

代码:

  1. package lanqiao;
  2. import java.util.*;
  3. public class Main {
  4. public static char[][] map = new char[101][101];
  5. public static int[][] vis = new int[101][101];
  6. public static int n,Ax,Ay;
  7. public static int cnt = 10001;
  8. public static void dfs(int x,int y,int num)
  9. {
  10. if(num >= cnt){
  11. return;
  12. }
  13. if(map[x][y] == 'B')
  14. {
  15. cnt = num;
  16. return;
  17. }
  18. vis[x][y] = 1;
  19. if(x-1>=1&&vis[x-1][y]!=1&&map[x][y]!=map[x-1][y]){
  20. dfs(x-1,y,num+1);
  21. }
  22. if(x+1>=1&&vis[x+1][y]!=1&&map[x][y]!=map[x+1][y]){
  23. dfs(x+1,y,num+1);
  24. }
  25. if(y-1>=1&&vis[x][y-1]!=1&&map[x][y]!=map[x][y-1]){
  26. dfs(x,y-1,num+1);
  27. }
  28. if(y+1>=1&&vis[x][y+1]!=1&&map[x][y]!=map[x][y+1]){
  29. dfs(x,y+1,num+1);
  30. }
  31. vis[x][y] = 0;
  32. }
  33. public static void main(String[] args) {
  34. Scanner sc = new Scanner(System.in);
  35. n = sc.nextInt();
  36. for(int i = 1;i <= n;i ++)
  37. {
  38. for(int j = 1;j <= n;j ++)
  39. {
  40. map[i][j] = sc.next().charAt(0);
  41. if(map[i][j] == 'A'){
  42. Ax = i;
  43. Ay = j;
  44. }
  45. }
  46. }
  47. dfs(Ax,Ay,0);
  48. if(cnt == 10001)
  49. {
  50. System.out.println(-1);
  51. }else{
  52. System.out.println(cnt);
  53. }
  54. }
  55. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号