Word Maze单词迷宫C语言解法(详细注解)

  • 题目描述
  • C语言代码
  • DFS算法

题目描述

Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。假设给定单词if,你必须先吃掉i然后才能吃掉f。
但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。
注意区分英文字母大小写,并且你只能上下左右行走。

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

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

C语言代码

#include <stdio.h>
#include <string.h>
/*也可不建立全局变量,将相关数组用指针的方式传递到函数中进行操作*/
int n, m;
char str[100];
char array[21][21];
int visit[21][21] = {0}; //记录已找过的字母位置
int DFS(int i, int j, int k, int length)
{/*判断是否到达单词尾部,若到达表示已找到*/if (k == length){return 1;}/*判断是否到达边界*/if ((i >= n) || (j >= m) || (i < 0) || (j < 0)){return 0;}/*判断该单词是否找过*/if (visit[i][j] == 1)return 0;/*若当前矩阵中的字母与对应单词一致,继续往下搜索*/if (array[i][j] == str[k]){/*将搜索过的位置进行标记*/visit[i][j] = 1;/*若已找到返回1*/if (DFS(i + 1, j, k + 1, length) || DFS(i - 1, j, k + 1, length) || DFS(i, j + 1, k + 1, length) || DFS(i, j - 1, k + 1, length))return 1;else{/*未找到,将之前标记走过的位置抹掉*/visit[i][j] = 0;}}/*若当前矩阵中的字母与对应单词不一致,返回0*/return 0;
}
int main()
{scanf("%d %d", &n, &m);scanf("%s", str);for (int i = 0; i < n; i++){scanf("%s", array[i]);}int length = strlen(str);for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){int flag = DFS(i, j, 0, length);if (flag == 1){printf("YES\n");return 0;}}}printf("NO");return 0;
}

DFS算法

在使用DFS算法解决问题时,首先需要考虑如下三个问题:

  1. 是否有条件不成立的信息
  2. 是否有条件成立的信息
  3. 是否需要标记已访问的节点

结合该题,针对以上三个问题分析:

  1. 条件不成立信息主要包括:
    a. 当前迷宫中的字符与单词中的字符不一致
    b. 到达边界
  2. 条件成立的信息主要包括:当前已搜索到单词尾部,说明已在迷宫中找到该单词
  3. 是否需要标记节点:需要。对已经访问的节点进行记录,同时注意当该路径走不通返回时,要将之前标记的节点信息抹掉。

Word Maze单词迷宫C语言解法(详细注解)相关推荐

  1. word maze 单词迷宫 (java语言编写)

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

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

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

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

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

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

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

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

    题三: (样题,已对外公布)Word Maze(单词迷宫) 描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先 ...

  6. 2015华为Word Maze 是一个网络小游戏,你需要找到以字母标注的食物

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

  7. 算法题--递归解法(化整思想、24点、全排列、单词迷宫解法加步骤)

    目录 递归思想 题目 24点 题目描述 解答要求 答案 解析 核心思想 步骤 全排列 题目描述 解答要求 答案 解析 核心思想 步骤 单词迷宫 题目描述 解答要求 答案 解析 核心思想 步骤 递归思想 ...

  8. c语言迷宫游戏怎么存放坐标,求解迷宫问题(c语言,很详细哦

    <求解迷宫问题(c语言,很详细哦>由会员分享,可在线阅读,更多相关<求解迷宫问题(c语言,很详细哦(5页珍藏版)>请在人人文库网上搜索. 1.求迷宫问题就是求出从入口到出口的路 ...

  9. c语言猜单词游戏实验报告,猜单词游戏c语言源程序.doc

    猜单词游戏c语言源程序 包括程序及txt文档,希望可以对您有所帮助 #include #include #include #include #include #include #include voi ...

最新文章

  1. 业务方的一堆需求,CTO一句话就怼回去了!这招太好用了
  2. python图像分割动态域值_python+opencv阈值分割
  3. TOMCAT报错:HTTP Status 404 -
  4. win11怎么改任务栏大小
  5. linux 一键安装lnmp
  6. OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测
  7. Jumpserver web界面跳板机
  8. 万有引力的意思_从牛顿的苹果到牛顿的大炮:万有引力定律
  9. Java线程同步之一--AQS
  10. 物联网的体系结构分为_初学物联网信息安全、3
  11. 美国国家人工智能研发战略规划2019
  12. AV1编码器优化技术
  13. md文件打开方式推荐
  14. 改进蚁群算法 改进flod算法对路径进行双向平滑度优化,提高路径的平滑度
  15. 详谈QTableWidget / QTableView
  16. 永强教你加解密:对称篇(一)
  17. matlab之直方图的绘制
  18. 设计一个Shape及其子类Oval
  19. Marlin架构解析
  20. 信签纸有虚线怎么写_中间有虚线的稿纸,字要写在哪里

热门文章

  1. 关于联通IPTV盒子和光猫之间接无线路由器
  2. 猪悟能淘宝商品下载专家v3版开发手记
  3. 微信公众号的类型和功能
  4. 金融机构数字化转型对央企建筑公司数字化转型的启示
  5. CSS实现长宽比的几种方案,CSS如何实现长宽比?
  6. Unity Editor 编辑器扩展 五 EditorGUI
  7. dds:publish
  8. 从零开始学_JavaScript_系列(五)——dojo(基础,动画移动,重力模拟,动画合并,添加标签)
  9. PHP实现手机号或身份证号中间几位变*
  10. (二十七)张量表示定理 —— Cauchy 基本表示定理