vivo2021届秋季校招编程题

图中 找两点间的最短路径长度
广度搜索bfs/深度搜索dfs

vivo游戏中心的运营小伙伴最近接到一款新游戏的上架申请,为了保障用户体验,运营同学将按运营流程和规范对其做出分析评估。经过初步了解后分析得知,该游戏的地图可以用一个大小为 n*n 的矩阵表示,每个元素可以视为一个格子,根据游戏剧情设定其中某些格子是不可达的(比如建筑、高山、河流或者其它障碍物等),现在请你设计一种算法寻找从起点出发到达终点的最优抵达路径,以协助运营小伙伴评估该游戏的可玩性和上手难度。

输入描述:
第一行表示矩阵大小 n,5
第二行表示起点和终点的坐标
第三行起是一个用矩阵表示的游戏地图,其中#或者@表示障碍物,其他字母、非0数字、以及符号+、-、* 等等均表示普通可达格子,共有 n 行 n 列

输出描述:
输出最优路径的长度;若无法到达,则输出-1

DFS + 记忆数组

public class Main2 {private static int[][] next = {{0,1},{1,0},{0,-1},{-1,0}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();char[][] graph = new char[n][n];int s_y = sc.nextInt(),s_x = sc.nextInt(),e_y = sc.nextInt(),e_x = sc.nextInt();for(int i =0;i<n;i++){graph[i] = sc.next().toCharArray();  // 使用nextLine() 会把前面的回车读进去}int[][] mark = new int[n][n];dfs(s_x,s_y,graph,mark,e_x,e_y,1);System.out.println(mark[e_x][e_y]-1);}public static void dfs(int s_x, int s_y,char[][] graph, int[][] mark,int e_x,int e_y,int step){int n = mark.length;if(s_x<0 || s_x>=n || s_y<0 || s_y>=n || graph[s_x][s_y]=='#' || graph[s_x][s_y]=='@' || (mark[s_x][s_y]!=0 && mark[s_x][s_y]<=step)) return;mark[s_x][s_y] = step; // 记忆数组 记录当前位置的最短距离if (s_x == e_x && s_y == e_y) return;for(int i=0;i<next.length;i++){dfs(s_x+next[i][0],s_y+next[i][1],graph,mark,e_x,e_y,step+1);// 注意不要改变实参,仅改行参就够了 否则影响下一个分支的结果}}
}

BFS

import javax.annotation.processing.SupportedSourceVersion;
import java.util.*;import static java.lang.System.out;class Node{int x;int y;int step;public Node(int x, int y, int step) {this.x = x;this.y = y;this.step = step;}
}
public class Main2 {private static int[][] next = {{0,1},{0,-1},{1,0},{-1,0}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();char[][] graph = new char[n][n];int s_y = sc.nextInt(),s_x = sc.nextInt(),e_y = sc.nextInt(),e_x = sc.nextInt();for(int i =0;i<n;i++){graph[i] = sc.next().toCharArray();  // 使用nextLine() 会把前面的回车读进去// sc.next() 以空格分割}boolean[][] mark = new boolean[n][n];Queue<Node> q = new LinkedList<>();Node s = new Node(s_x,s_y,0);q.offer(s);mark[s.x][s.y] = true;while(!q.isEmpty()){Node cur = q.poll();if(cur.x == e_x && cur.y == e_y) {System.out.println(cur.step);return;}for(int i=0;i<next.length;i++){int x = cur.x + next[i][0];int y = cur.y + next[i][1];if(x>=0 && y>=0 && x<n && y<n && !mark[x][y] && graph[x][y]!='@' && graph[x][y]!='#') {q.offer(new Node(x, y, cur.step + 1)); // 把可以走的路 放到队列里mark[x][y] = true;}}}System.out.println(-1);return;}
}

【vivo2021届秋季校招编程题】【java】广度优先搜索(BFS)/深度优先搜索(DFS)找最短路径长度相关推荐

  1. 【vivo2021届秋季校招编程题】【java】队列实现拓扑排序

    一个完整的软件项目往往会包含很多由代码和文档组成的源文件.编译器在编译整个项目的时候,可能需要按照依赖关系来依次编译每个源文件.比如,A.cpp 依赖 B.cpp,那么在编译的时候,编译器需要先编译 ...

  2. vivo2021届秋季校招在线编程

    vivo2021届秋季校招在线编程 //用队列实现拓扑排序,但因为题目要求"同时可以编译多个文件的情况,按数字升序返回",所以用个小根堆来保持升序的特性. import java. ...

  3. 【JAVA】vivo2021届秋季校招笔试在线编程

    目录 前言 一.游戏地图路径(没尝试,时间不够,我对最短路径问题不熟) 二.回文字符串(A0.8,逻辑混乱了) 三.编译依赖问题(全A) 前言 兄弟们都会有offer的,不要慌,奥力给 一.游戏地图路 ...

  4. 【爱奇艺】2018秋季校招编程题

    共 道题: 1.拼凑三角形(Easy) 2.红和绿(Easy) 3.括号匹配深度(Easy) 4.奇异数 5.奶牛编号 6.空中旅行(Easy) 7.循环数比较 8.平方根问题 9.平方串(最长偶串) ...

  5. P1331 海战 (搜索 广度优先搜索,BFS深度优先搜索,DFS)

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  6. LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵. 'M' 代表一个未挖出的地雷, 'E' 代表一个未挖出的空方 ...

  7. P1506 拯救oibh总部 (模拟搜索广度优先搜索,BFS深度优先搜索,DFS)

    题目背景 oibh总部突然被水淹没了!现在需要你的救援-- 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用*号表示,而一个封闭的*号区域洪水是进 ...

  8. 经典笔试编程题--Java实现

    转载自  经典笔试编程题--Java实现 1.输入一个正数n,输出所有和为n的连续正数序列.  分析:设定两个指针,min指向和为n的连续正数序列的最小值,max指向和为n的连续正数序列最大值.sum ...

  9. 西安交通大学915考研--编程题Java代码踩坑(2020年真题)

    西安交通大学915考研–编程题Java代码踩坑(2020年真题) 目录 西安交通大学915考研--编程题Java代码踩坑(2020年真题) 2020.1--寻找方程组的解 2020.2--几组数中筛选 ...

最新文章

  1. 转、转、转——陀螺的梦话
  2. 编译与部署dubbo管控平台dubbo-admin
  3. 《面向对象分析与设计》读书笔记——第一章 复杂性
  4. 'vue' 不是内部或外部命令
  5. 安装python的twisted_如何在Python3.5上安装 Twisted(为了Scrapy)
  6. Storm 01_初识初知
  7. 09.snapshot and restore操作
  8. PoE交换机的4种连接方法
  9. WebHelper类
  10. 8 MM配置-主数据-定义行业部门和具体行业部门字段选择
  11. Espcms 注册或登录提示Can not connect to MySQL server
  12. 的不定积分_不定积分大集合——方法篇
  13. 安川g7接线端子图_安川G7(IP)+蓝光STB板同步
  14. linux更换输入法_一日一Linux之一:CentOS 8.1 王者荣耀
  15. 英文版xp系统下载ghost xp sp3英文版(双语纯净版、可随意转换)
  16. 如何设计出优秀的EDM邮件营销模板
  17. redis之地理位置
  18. Freeswitch在阿里云服务器语音不通问题小记(FS的NAT 穿透)
  19. Losses Can Be Blessings: Routing Self-Supervised Speech Representations Towards Efficient Multilingu
  20. 2021届 大疆一面 嵌入式软件

热门文章

  1. 聚来宝:APP带你玩转移动4G购物时代
  2. 【收藏】它绝对是最适合自学的Python教材!
  3. 使用python统计《三国演义》人物词频,看看罗贯中笔下谁的出场次数最多
  4. 网吧计算机配置特点,为何网吧电脑配置不高,但玩起来却一点都不卡?网管说出真相!...
  5. python雷达图数据_Python怎么画雷达图?Matplotlib数据可视化008:雷达图\极坐标图...
  6. 联合体(共用体) union 的深入理解
  7. flowplayer 视频播放器
  8. vue引入阿里iconfont
  9. 计算机怎么建立共享网络打印机共享,教你实现局域网打印机共享设置 Win7
  10. 火车票能不能选座_在购票窗口买火车票可以选座吗?