Word Maze 网络小游戏
2014-04-27 20:17
465 查看
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
这是一道华为机试题,博主不才,有问题还请大家指出,一起探讨。
下面是代码:
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; }
相关文章推荐
- 网络中国象棋小游戏的实现
- 【Java】网络打字对战小游戏
- 2015华为Word Maze 是一个网络小游戏,你需要找到以字母标注的食物
- 《影子跟随算法》目前试着自己写一个联网双人对战的小游戏 看到一篇网络同步的文章很受启发 这里记录一下
- 【网络安全】让IIS服务器无懈可击(转)
- 自己动手解决的网络共享
- 网络数据库开发教学视频
- 网络安全的侦测与工具
- 网络团购能否撼动传统购物?
- 网络系统集成
- Linux网络系统可能受到的攻击类型
- 网络传输协议概述——第二讲:TCP/IP协议概述
- Linux下长时间ping网络加时间戳并记录到文本
- python 网络编程1
- P2PSIP 网络电话系统的分析
- “热爱自由开放的网络?告诉全世界政府让它保持这种精神”google的这句话真心要顶起呀。。。
- 贝叶斯信念网络
- 网络
- unp笔记一 网络编程基础