• 蓝桥杯 穿越雷区 (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,否则按无效代码处理。


    题解:这一题就是一个很中规中矩的广搜 个人觉得难点在于怎么处理给出的图中的空格。

    注意点:

    1、要是用cin.nextLine()那就全部输入都用,包括最开始输入的n。

    2、我们可以用 String s[] = cin.nextLine().split(" ") 将每一行的字符串中空格去掉,变成一个个没有空格的子字符串,保存在字符串数组s[]中。

    3、StringBuffer类可以在字符串后面任意添加字符串。

    4、node 用之前一定要重新new.

     1 import java.util.ArrayDeque;
     2 import java.util.Scanner;
     3 class node{
     4     int x;
     5     int y;
     6     int step;
     7     int flag;
     8 }
     9 public class Main {
    10     static int [][] vis = new int [110][110];
    11     static int sx,sy,ex,ey,n,ans = Integer.MAX_VALUE;
    12     static char [][] mp = new char[110][110];
    13     static int dir[][] = {{0,1},{1,0},{-1,0},{0,-1}};
    14     static node head,tail;
    15     static ArrayDeque<node> q = new ArrayDeque<node>();
    16     static void bfs() {
    17         q.offer(head);
    18         while(!q.isEmpty()) {
    19             node head = new node();//必须写
    20             head = q.poll();
    21             if(head.x==ex&&head.y==ey) {
    22                 ans = Math.min(ans, head.step);
    23                 return;
    24             }
    25             for(int i=0;i<4;i++) {
    26                 int tx = head.x + dir[i][0];
    27                 int ty = head.y + dir[i][1];
    28                 if(tx<0||tx>=n||ty<0||ty>=n||vis[tx][ty]==1)
    29                     continue;
    30                 if(head.flag==-1) {
    31                     if(mp[tx][ty]=='-')
    32                         continue;
    33                 }
    34                 if(head.flag==1)
    35                     if(mp[tx][ty]=='+')
    36                         continue;
    37                 vis[tx][ty] = 1;
    38                 tail = new node();//必写
    39                 tail.x = tx;
    40                 tail.y = ty;
    41                 tail.flag = -head.flag;
    42                 tail.step = head.step + 1;
    43                 q.offer(tail);
    44             }
    45         }
    46     }
    47     public static void main(String[] args) {
    48         Scanner cin = new Scanner(System.in);
    49         n = Integer.parseInt(cin.nextLine());
    50         for(int i=0;i<n;i++) {
    51             String s[] = cin.nextLine().split(" ");
    52             StringBuffer c = new StringBuffer();
    53             for(int j=0;j<s.length;j++)
    54                 c.append(s[j]);
    55             for(int j=0;j<c.length();j++)
    56                 mp[i][j] = c.charAt(j);
    57          }
    58         for(int i=0;i<n;i++) {
    59             for(int j=0;j<n;j++) {
    60                 if(mp[i][j]=='A') {
    61                     sx = i;
    62                     sy = j;
    63                 }
    64                 if(mp[i][j]=='B') {
    65                     ex = i;
    66                     ey = j;
    67                 }
    68             }
    69         }
    70         head = new node();
    71         head.x = sx;
    72         head.y = sy;
    73         head.flag = -1;
    74         head.step = 0;
    75         bfs();
    76         head.x = sx;
    77         head.y = sy;
    78         head.flag = 1;
    79         head.step = 0;
    80         bfs();
    81         if(ans!=Integer.MAX_VALUE)
    82             System.out.println(ans);
    83         else
    84             System.out.println(-1);
    85     }
    86 }
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    RabbitMQ如何保证消息的可靠性
    CentOS7 升级 curl 到 HTTP2
    线程间变量独享
    python 线程间变量私有
    【手绘漫画】图解LeetCode之相交链表(LeetCode 160)
    $request_filename
    Oracle 20c 新特性知多少?ANSI SQL 全支持之 EXCEPT 运算符增强
  • 原文地址:https://www.cnblogs.com/1013star/p/10734170.html
Copyright © 2020-2023  润新知