题三:

(样题,已对外公布)Word Maze(单词迷宫)

描述:

Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。

但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。

如下图,指定W为“SOLO”,则在地图中红色标注了单词“SOLO”。

注意区分英文字母大小写,你只能上下左右行走。

运行时间限制: 无限制

内存限制: 无限制

输入: 输入第一行包含两个整数n、m(0<n, m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。

输出: 如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。注意:每个字母只能用一次。

样例输入: 5 5

SOLO

CPUCY

EKLQH

CRSOL

EKLQO

PGRBC

样例输出: YES

本题用到的算法为穷举求解,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。在求迷宫通路的算法中应用“栈”较为方便。本人采用的是递归方法。

代码如下:

#include <iostream>using namespace std;int n, m;   //行、列数
char maze[100][21] = { {'\0'} };  //字母矩阵
char w[101] = { '\0' }; //待查找的单词
int len = 0; //待查找单词的长度
int flag[100][21] = { { 0 } };  //二维位置标志
int a[4] = { 0, 0, -1, 1 }, b[4] = { 1, -1, 0, 0 };  //设置行、列变换路径:行只能向上向下、列只能向左向右
int findit = 0;  //是否找到单词标志int search(int p, int q, int k)  //递归查找
{int i, s, t;if (k == len)  //所有字母都找完,则是否找到单词的标志置1,返回{findit = 1;return 0;}flag[p][q] = 1;  //找到,该位置标志置1for (i = 0; i < 4; i++){s = p + a[i];  //改变行t = q + b[i];  //改变列if (s >= 0 && s < n && t >= 0 && t < m && flag[s][t] == 0 && maze[s][t] == w[k])//查找字母位置在矩阵内,且该位置未被查找过,同时找到字母search(s, t, k + 1); //寻找下一个字母}flag[p][q] = 0;  //没找到,该位置标志重新置0return 0;
}int main()
{int i, j;cin >> n >> m;        //输入行、列数cin.get();            //取掉回车符cin.getline(w, 100);  //输入待查找的单词len = strlen(w);      //待查找单词的长度for (i = 0; i < n; i++){cin.getline(maze[i], 21);  //输入字母矩阵}for (i = 0; i < n; i++){for (j = 0; j < m; j++){if (maze[i][j] == w[0])  //找到首字母{flag[i][j] = 1;      //找到,该字母标志置1search(i, j, 1);     //查找flag[i][j] = 0;      //没找到,该字母位置标志重新置0}}}if (findit == 1)  //连成给定的单词cout << "YES" << endl;else              //未连成给定的单词cout << "NO" << endl;return 0;
}

20150802厦门大学华为校园提前批招聘机试体验题三:Word Maze(单词迷宫)相关推荐

  1. 华为上机题之Word Maze(单词迷宫)

    Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你现在处于一个 ...

  2. 华为软件类校招 2014年9月3日 熟悉机考环境 1.记票统计 2.求最大递增数 3.Word Maze(单词迷宫)

    (样题,已对外公布)记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B"."C"." ...

  3. 2015年华为实习生机试样题(记票统计,计算麻将的番数,Word Maze(单词迷宫))

    这是华为今年实习生招聘给的样题,还是特别喜欢考字符串处理问题. 记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B" ...

  4. 【华为OD机试真题 python】机器人走迷宫 【2022 Q4 | 200分】

    前言 <华为OD笔试真题 python> 专栏含华为OD机试真题.华为面试题.牛客网华为专栏真题. 如果您正在准备华为的面试,或者华为od的机会,有任何想了解的可以私信我进行交流.我会尽可 ...

  5. 华为2015年实习招聘机试

    今天下午1点15分至3点15分,在华工实验室进行了华为实习招聘考试.一共三道题,我只做出了两道.其中第二道第一次提交时没通过,原因是没考虑到字符串可能含有空格,而cin >> myStr在 ...

  6. 【华为OD机试真题 JAVA】机器人走迷宫

    标题:机器人走迷宫 | 时间限制:1秒 | 内存限制:65536K | 语言限制:不限 1. 房间由X*Y的方格组成,例如下图为6*4的大小.每一个方格以坐标(x,y)描述. 2. 机器人固定从方格( ...

  7. 【100%通过率】华为OD机试真题 C 实现【单词倒序】【2022.11 Q4 新题】

            所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录 题目 题目描述 输入单行英文句子,里面包含英文字母,空格以 ...

  8. 华为机试真题分类汇总

    1. 字符串 类别 题目 知识点 题目分值 / 难度 字符串 [华为机试真题 JAVA]TLV解析Ⅰ-100 字符串分隔.拼接.搜索 100/中等 字符串 [华为机试真题 JAVA]寻找相同子串-10 ...

  9. 北京理工计算机学院夏令营机试,北京理工大学计算机近几年机试真题及题解 上...

    2010年机试真题 1.输入一串整数,输入命令排序! 输入a t在这串整数后面添加整数t, 输入c\m\n有n替换m, 输入d t删除t, 输入s排序. #include #include #incl ...

最新文章

  1. 关于权限五张表的独到见解
  2. android 动态控制截屏,应用助手for Android新版本:可动态截屏存图
  3. 全国计算机等级考试题库二级C操作题100套(第42套)
  4. 计算属性computed的使用
  5. Apsara Clouder专项技能认证:实现调用API接口
  6. 机器学习入门必备的13张“小抄”(附下载)
  7. Windows Vista和局域网聊天的计算机
  8. esxi虚机启动慢的问题
  9. SAP License:全球十大主流ERP厂商,看看你是不是在用
  10. 一揽子修改win10的IP地址
  11. SQLite 3导入导出成txt或csv操作
  12. 联想服务器自动关机_联想电脑老是自动关机怎么回事
  13. mysql 参数 1_警告:mysql_result()期望参数1为资源,给定布尔值[重复]
  14. angularjs-大漠穷秋
  15. SDCard权限设置
  16. 传手机ODM厂商拿到三星大单 将带动产业链走出寒冬?
  17. CCS编写F28335定时器0测试程序报错unresolved symbols remain error解决方法
  18. OpenCV实现图像的裁块与拼接
  19. AudioKit 教程:入门
  20. IO模型(阻塞,非阻塞,多路复用)

热门文章

  1. 互联网运营面试题_必看❗️面试互联网运营常见问题及答案
  2. 从吃凉的就会肚子疼,不敢吃可爱多以下的雪糕,吃饱后去逛街肚子就会胀,到后来吃饭的时候就胃疼解决办法
  3. 技术术语学习之paradigm
  4. SEM(结构方程模型)
  5. 运用awk提取日志文件中的IP地址
  6. springboot Filed to bind properties under
  7. Python面向对象之访问限制
  8. linux mkdir命令用法,常用Linux运维命令 - mkdir命令用法详解
  9. python可以这样学读后感_《Python深度学习》读后感
  10. 《仙剑奇侠传3》全攻略