/*************************************
华为机试WORD MAZE(单词迷宫)
Word Maze 是一个网络小游戏,你需要找到
以字母标注的食物,但要求以给定单词字母
的顺序吃掉。如上图,假设给定单词if,你
必须先吃掉i然后才能吃掉f。但现在你的任
务可没有这么简单,你现在处于一个迷宫
Maze(n×m的矩阵)当中,里面到处都是以
字母标注的食物,但你只能吃掉能连成给定
单词W的食物。如下图,指定W为“SOLO”,
则在地图中红色标注了单词“SOLO”。注意
区分英文字母大小写,你只能上下左右行走。
*************************************/
#include
#include
#include
#include
using namespace std;
//为方便调试,直接将矩阵定义好
//程序存在bug,没有处理“每个字母
//只能用一次。”
//5*5的矩阵
char word[5][5]={
'C','P','U','C','Y',
'E','K','L','Q','H',
'C','R','S','O','L',
'E','K','L','Q','O',
'P','G','R','B','C',
};
//四位分别表示左上右下
//为1表示可以访问,0不可
//1111-0xf,0011-0x3,1011-0xb
//1001-0x9,0111-0x7,1101-0xd
//0110-0x6,1110-0xe,1100-0xc
bitset<4> bits[5][5]={
0x3,0xb,0xb,0xb,0x9,
0x7,0xf,0xf,0xf,0xd,
0x7,0xf,0xf,0xf,0xd,
0x7,0xf,0xf,0xf,0xd,
0x6,0xe,0xe,0xe,0xc,
};
bool find(string s,int i,int j,int sum)
{
if(s[sum]!=word[i][j])
return false;
if( sum+1==s.size() && s[sum]==word[i][j] )//循环到单词的最后一位
return true;
while(sum>s;
for(int i=0;i<=4&&!flag;i++)//防止多次输出done,在一次获得后程序就停止继续
{
for(int j=0;j<=4&&!flag;j++)
{
if(s[0]==word[i][j])
{
bool res = find(s,i,j,0);
if(res==true)
{
cout<<"done"<
华为机试—单词迷宫
最新推荐文章于 2024-01-26 11:04:25 发布