2015年javaB组1-4题解析与理解(二)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 2015年javaB组1-4题解析与理解

这个函数是用来获取当前节点的左边的宽度:


private int getRootPos(int x){
    return l==null? x : x + l.getWidth();
  }


之后我们可以通过这两行代码结合图片知道:

buf[y][p2] = ‘|’;

for(int i=p1; i<=p3; i++) buf[y+1][i]=’-’;

第y行只用来表示|符号

第y+1行用来表示/和----和根节点

p1的位置就代表左孩子结点的位置,p2代表右孩子结点的位置。

又通过分析填空之前的范围for(int i=0; i<sv.length(); i++)可以发现刚好是根节点的这个字的长度,又结合for(int i=p1; i<=p3; i++) buf[y+1][i]=’-’;可以知道原先是将整个范围内圈赋值为—,之后通过我们要填的这段代码将根节点的值赋进去所以分析得出,最后填的代码应该是;buf[y+1][p2+i]=sv.charAt(i);

接下来就是我填进去之后运行的结果:


20181027233027920.png

第四题:

标题:穿越雷区


X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。

某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?


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

例如:


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


数据格式要求:


20181027233204150.png


输入第一行是一个整数n,表示方阵的大小, 4<=n<100

接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。

A,B都只出现一次。

要求输出一个整数,表示坦克从A区到B区的最少移动步数。

如果没有方案,则输出-1

例如:

用户输入:


20181027233223360.png

则程序应该输出:

10


资源约定:

峰值内存消耗(含虚拟机) < 512M

CPU消耗 < 2000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。


这里的主要思想就是深搜,以及剪枝这里剪枝可以通过下标的位置是否合乎范围来剪枝就比如:


if(i<0||i>n-1||j<0||j>n-1)
      return;


之后还有一点就是,只能走自己附近的点就是上下左右,所以我们可以通过一个数组来实现即:


public static int dir[][]=new int[][]{{-1,0},{0,1},{1,0},{0,-1}};


之后就比较简单了,以下是源代码;

import java.util.Scanner;
public class num04 {
  public static int n;
  public static int i1,j1;
  public static int count=0;
  public static int min;
  public static boolean flag=false;
  public static char map[][];
  public static int visit[][];
    public static int dir[][]=new int[][]{{-1,0},{0,1},{1,0},{0,-1}};
  public static void dfs(int i,int j)
  {
    int ii,jj;
    if(map[i][j]=='B')
    {
      flag=true;
      if(count<min)
        min=count;
      return ;
    }
    if(i<0||i>n-1||j<0||j>n-1)
      return;
    for(int k=0;k<4;k++)
    {
      ii=i+dir[k][0];
      jj=j+dir[k][1];
      if(ii<0||ii>n-1||jj<0||jj>n-1)
        continue;
      if(visit[ii][jj]==0&&map[ii][jj]!=map[i][j])
        {
          visit[ii][jj]=1;
          count++;
          dfs(ii, jj);
          count--;
          visit[ii][jj]=0;
        }
    }
  }
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    n=sc.nextInt();
    sc.nextLine();
    map=new char[n][n];
    visit=new int [n][n];
    min=n*n;
    String []str1=new String[n];
    String []str2=new String[n];
    for(int i=0;i<n;i++)
    {
      for(int j=0;j<n;j++)
      {
        visit[i][j]=0;
      }
    }
    for(int i=0;i<n;i++)
    {
      str1[i]=sc.nextLine();
      str2[i]=str1[i].replace(" ", "");
    }
    for(int i=0;i<n;i++)
    {
      for(int j=0;j<n;j++)
      {
        map[i][j]=str2[i].charAt(j);
        if(map[i][j]=='A')
        {
          i1=i;
          j1=j;
          visit[i1][j1]=1;
        }
      }
    }
    dfs(i1, j1);
    if(flag)
      System.out.println(min);
    else
      System.out.println(-1);
  }
}


作者很菜,如有不足,请指教


相关文章
十三届蓝桥杯真题JavaB组解析+代码(带你复习知识点)(一)
十三届蓝桥杯真题JavaB组解析+代码(带你复习知识点)(一)
|
缓存 Java 测试技术
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:7.外卖店优先级
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:7.外卖店优先级
137 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:7.外卖店优先级
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫
129 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:4.数的分解
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:4.数的分解
144 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:4.数的分解
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:3.数列求值
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:3.数列求值
60 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:3.数列求值
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:2.不同子串
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:2.不同子串
110 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:2.不同子串
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:1.组队
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:1.组队
115 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:1.组队
|
测试技术
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:8.字符串编码
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:8.字符串编码
111 0
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:8.字符串编码
|
测试技术
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:6.特别数的和
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:6.特别数的和
79 0
|
测试技术
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:7.八次求和
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:7.八次求和
94 0

推荐镜像

更多
下一篇
无影云桌面