华为机试---Word Maze迷宫游戏
import java.util.Scanner;
public class Main{
private static boolean isFind = false;//全局变量,保存是否找到食物单词
private static boolean[][] flag;//保存访问标记
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int n = scan.nextInt();
int m = scan.nextInt();
String w = scan.next();
char[][] maze = new char[n][m];
flag = new boolean[n][m];//访问标记位
for(int i = 0 ; i < n ; i++){
maze[i] = scan.next().toCharArray();
}
findStart(n , m , w , maze);
if(isFind){
System.out.println("YES");
}else{
System.out.println("NO");
}
}
scan.close();
}
private static void findStart(int n , int m , String w , char[][] maze){
//遍历结束如果isFind还没有更新为true表示没有找到
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < m ; j++){
if(maze[i][j] == w.charAt(0)){
flag[i][j] = true;
findNext(w , 1 , i , j , maze);
if(isFind) return; //如果找到直接返回,如果找不到遍历完maze
}
}
}
}
private static void findNext(String w, int index, int row, int col , char[][] maze) {
int n = maze.length;
int m = maze[0].length;
if(index == w.length()){
isFind = true;
return;
}
int nextIndex = index + 1;
//防止越界
if(row - 1 >= 0 && !flag[row - 1][col]){
if(maze[row - 1][col] == w.charAt(index)){
flag[row - 1][col] = true;
findNext(w , nextIndex , row - 1 , col , maze);
}
}
if(row + 1 < n && !flag[row + 1][col]){
if(maze[row + 1][col] == w.charAt(index)){
flag[row + 1][col] = true;
findNext(w , nextIndex , row + 1 , col , maze);
}
}
if(col - 1 >= 0 && !flag[row][col - 1]){
if(maze[row][col - 1] == w.charAt(index)){
flag[row - 1][col] = true;
findNext(w , nextIndex , row , col - 1 , maze);
}
}
if(col + 1 < m && !flag[row][col + 1]){
if(maze[row][col + 1] == w.charAt(index)){
flag[row][col + 1] = true;
findNext(w , nextIndex , row , col + 1 , maze);
}
}
flag[row][col] = false;//如果当前节点走不下去,更新为false,重新寻找其他字母
}
}
华为机试---Word Maze迷宫游戏相关推荐
- 华为机试:机器人走迷宫
题目来源 华为机试:机器人走迷宫 题目描述 1. 房间由XY的方格组成,例如下图为64的大小.每一个方格以坐标(x,y)描述. 2. 机器人固定从方格(0,0)出发,只能向东或者向北前进.出口固定为房 ...
- 华为机试二星题--机器人走迷宫
题目 机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入. 机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不 ...
- 【华为机试真题 Python实现】报数游戏
文章目录 前言 题目描述 示例 1 示例 2 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会 ...
- 华为机试108题(C 语言解答)
Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...
- 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...
- 【华为机试真题Java】从入门到入职-真题列表导读
写在前面 本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题.大家有什么不懂的都可以留言. 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100 ...
- 牛客在线编程-华为机试-中等
牛客在线编程题目-华为机试-中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21.21% HJ17 坐标移动 字符串 中等 24.79% HJ20 密码验证合格程序 数组 字 ...
- 【华为机试真题 Python实现】2022年4、5月高频机试题
文章目录 2022年4.5月高频机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值 ...
- 集合篇10.华为机试(涮题记录2)
华为机试 31.成绩排序(**not) 32. 矩阵乘法 33. 24点游戏算法(not) 34.配置文件恢复 35. 查找两个字符串a.b中的最长公共子串 36.MP3光标位置(not) 37.DN ...
最新文章
- SIFT特征点匹配中KD-tree与Ransac算法的使用
- 7-1 对称日 (15分)
- %matplotlib inline %config InlineBackend.figure_format = “retina为了将图片嵌入notebook及提高分
- linux和android调试概要
- 11、CROSS JOIN:交叉连接(笛卡尔积)
- 我是Python小玩家,一行代码能做哪些炫酷的事情 (三十一)
- OnClickListener冲突的问题
- MIP开发教程(一) MIP-CLI工具安装与环境部署
- 性能优化挑战重重,鲲鹏 HPC 如何突破算力桎梏?
- 用 65 行代码实现 JavaScript 动画序列播放
- 笔记本电脑下载python视频-笔记本怎样安装Python64位的?
- 笨办法学Python(第三版)pdf
- 2015 多校联赛 ——HDU5302(矩阵快速幂)
- mysql sql model设置_操作mysql model
- android 快速unity,关于android:Unity平台-快速集成华为性能管理服务
- 一起学习MySQL(基础阶段已完结)
- 国产操作系统要起来?自主银河麒麟V10发布!
- WebRTC收集网卡地址信息 源码剖析
- iOS weak关键字实现原理
- 大数据产品开发流程规范_大数据开发步骤和流程
热门文章
- android 红外驱动,Android内核驱动-红外驱动IR
- MySQL学习(2)——MySQL表的增删查改(基础)
- QQ查询信息php,查询QQ信息
- 韩信点兵--中国剩余定理
- AngularJs实战(六)
- screenX clientX pageX的区别
- mysql order field_mysql 使用order by filed,locate和instr自定义排序
- Basset: learning the regulatory code of the accessible genome with deep convolutional neural network
- Bootstrap登录页面带验证码
- (LaTex)CTex的初次使用心得及入门教程