Word Maze单词迷宫C语言解法(详细注解)
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算法解决问题时,首先需要考虑如下三个问题:
- 是否有条件不成立的信息
- 是否有条件成立的信息
- 是否需要标记已访问的节点
结合该题,针对以上三个问题分析:
- 条件不成立信息主要包括:
a. 当前迷宫中的字符与单词中的字符不一致
b. 到达边界 - 条件成立的信息主要包括:当前已搜索到单词尾部,说明已在迷宫中找到该单词
- 是否需要标记节点:需要。对已经访问的节点进行记录,同时注意当该路径走不通返回时,要将之前标记的节点信息抹掉。
Word Maze单词迷宫C语言解法(详细注解)相关推荐
- word maze 单词迷宫 (java语言编写)
Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词 if,你必须先吃掉i然后才能吃掉f.但现在你的任务可没有这么简单,你现在处于一个 ...
- 2015年华为实习生机试样题(记票统计,计算麻将的番数,Word Maze(单词迷宫))
这是华为今年实习生招聘给的样题,还是特别喜欢考字符串处理问题. 记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B" ...
- 华为软件类校招 2014年9月3日 熟悉机考环境 1.记票统计 2.求最大递增数 3.Word Maze(单词迷宫)
(样题,已对外公布)记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B"."C"." ...
- 华为上机题之Word Maze(单词迷宫)
Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你现在处于一个 ...
- 20150802厦门大学华为校园提前批招聘机试体验题三:Word Maze(单词迷宫)
题三: (样题,已对外公布)Word Maze(单词迷宫) 描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先 ...
- 2015华为Word Maze 是一个网络小游戏,你需要找到以字母标注的食物
Word Maze(单词迷宫) 描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词 if,你必须先吃掉i然后才能吃掉f. ...
- 算法题--递归解法(化整思想、24点、全排列、单词迷宫解法加步骤)
目录 递归思想 题目 24点 题目描述 解答要求 答案 解析 核心思想 步骤 全排列 题目描述 解答要求 答案 解析 核心思想 步骤 单词迷宫 题目描述 解答要求 答案 解析 核心思想 步骤 递归思想 ...
- c语言迷宫游戏怎么存放坐标,求解迷宫问题(c语言,很详细哦
<求解迷宫问题(c语言,很详细哦>由会员分享,可在线阅读,更多相关<求解迷宫问题(c语言,很详细哦(5页珍藏版)>请在人人文库网上搜索. 1.求迷宫问题就是求出从入口到出口的路 ...
- c语言猜单词游戏实验报告,猜单词游戏c语言源程序.doc
猜单词游戏c语言源程序 包括程序及txt文档,希望可以对您有所帮助 #include #include #include #include #include #include #include voi ...
最新文章
- 业务方的一堆需求,CTO一句话就怼回去了!这招太好用了
- python图像分割动态域值_python+opencv阈值分割
- TOMCAT报错:HTTP Status 404 -
- win11怎么改任务栏大小
- linux 一键安装lnmp
- OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测
- Jumpserver web界面跳板机
- 万有引力的意思_从牛顿的苹果到牛顿的大炮:万有引力定律
- Java线程同步之一--AQS
- 物联网的体系结构分为_初学物联网信息安全、3
- 美国国家人工智能研发战略规划2019
- AV1编码器优化技术
- md文件打开方式推荐
- 改进蚁群算法 改进flod算法对路径进行双向平滑度优化,提高路径的平滑度
- 详谈QTableWidget / QTableView
- 永强教你加解密:对称篇(一)
- matlab之直方图的绘制
- 设计一个Shape及其子类Oval
- Marlin架构解析
- 信签纸有虚线怎么写_中间有虚线的稿纸,字要写在哪里