Word Maze 网络小游戏

来源:互联网 发布:面试php基础知识 编辑:程序博客网 时间:2024/06/04 19:00

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 "stdafx.h"#include<iostream>#include<string>using namespace std;static char **pCube;static char word[100];static int row,column;//吃字母逻辑void eatWord(int w,int i,int j,int *flag){//不能越界if(i<0||i>row||j<0||j>column) {return;}//成功条件是标志位w==单词长度if (w==strlen(word)){cout<<"YES";return;}if (i<row-1&&pCube[i+1][j]==word[w]&&flag[(i+1)*row+j]==0){flag[(i+1)*row+j]=1;eatWord(w+1,i+1,j,flag);}if (i>0&&pCube[i-1][j]==word[w]&&flag[(i-1)*row+j]==0){flag[(i-1)*row+j]=1;eatWord(w+1,i-1,j,flag);}if (j<column-1&&pCube[i][j+1]==word[w]&&flag[i*row+j+1]==0){flag[i*row+j+1]=1;eatWord(w+1,i,j+1,flag);}if (j>0&&pCube[i][j-1]==word[w]&&flag[i*row+j-1]==0){flag[i*row+j-1]=1;eatWord(w+1,i,j-1,flag);}//将字母使用标志位重新全部置零for (int x = 0; x < row*column; x++){flag[x]=0;}return;}int _tmain(int argc, _TCHAR* argv[]){cout<<"输入行数 列数:"<<endl;cin>>row>>column;cout<<"输入单词:"<<endl;cin>>word;cout<<"输入矩阵:"<<endl;pCube = new char*[row];//初始化标志位,保证每个字母只用一次int *flag = (int *)malloc(sizeof(int)*row*column);for (int i = 0; i < row*column; i++){flag[i]=0;}//初始化矩阵for (int i = 0; i < row; i++){pCube[i] = new char[column];cin>>pCube[i];}//找到矩阵中和单词首字母一致的位置,开吃!int w=0;for (int i = 0; i < row; i++){for (int j = 0; j < column; j++){if(word[w]==pCube[i][j]){flag[i*row+j]=1;eatWord(w+1,i,j,flag);}}}cout<<"NO"<<endl;system("PAUSE");return 0;}

0 0
原创粉丝点击