华为机试—单词迷宫

/*************************************
	华为机试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"<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值