网易游戏2016实习生招聘在线笔试:A 推箱子
2015-05-21 11:24
405 查看
题目1 : 推箱子
时间限制:10000ms单点时限:1000ms
内存限制:256MB
描述
推箱子是一款经典游戏。如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目标点。规定以下规则:
1、一局游戏中只会有一个箱子,一个玩家和一个目标点。
2、通过方向键控制玩家移动。
3、图中的灰色格子代表墙壁,玩家与箱子都不能通过。
4、推到墙壁的箱子,就无法再将箱子推离墙壁,因为玩家无法到达箱子靠墙壁的一侧去推箱子。也就是说箱子只能以“被推”的方式被移动,不是以“被拉”的方式被移动。但如果玩家将箱子推至墙壁后,垂直墙壁的两侧没有阻碍物,则玩家可以朝这两个不同的方向推移箱子。如果箱子进入角落,就没有办法再推动这个箱子了。
5、玩家是不能走出场景的。玩家推着箱子到达场景边缘,如果继续点击使玩家和箱子向墙壁前进的方向键,箱子和人都会保持不动。玩家的前进方向上如果有墙壁,也是不能前进的。但是这些点击都视为合理的输入。
6、箱子一旦到达目标点,就不能再移动了。但这时,玩家仍然可以在场景内自由行动。如果继续尝试推箱子,那么玩家将会和箱子一起保持在原地不动。
现在,给出一种方向键的点击方案,请判断,这种方案是否能使箱子最终停在目标点上。为了方便表示,我们以0代表空白格子,以4代表不能通过区域,以1代表玩家,以3代表箱子,以2代表目标点。
输入
第一行数据包含三个整数,N,M,S。其中,N(0 < N <= 100)代表格子的宽度,M(0 < M <= 100)代表格子的高度,S(0 < S <= 200)代表测试点的个数。接下来的M行,每行都会有N个字符,描述当前的盘面。
接下来的S行,每行都代表一个测试点。每行都以一个整数T(0 < T <= 10000)开头,接下来是一个空格和T个字符。这T个字符仅由d,u,l,r这四个字母组成,分别代表了敲击向下,向上,向左,向右的方向键。
输出
对于每个测试点,输出最后箱子是否在目标点上。如果是,输出YES,如果不是,则输出NO。样例输入
5 4 3 00000 13000 00200 00000 4 rurd 6 urdldr 6 rrrurd
样例输出
YES YES NO
我的AC代码,很直接的思路
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct Node { int ha,li; }; char gezi[105][105]; char cz[10010]; int n,m,s; int wjh=0,wjl=0; int xzh=0,xzl=0; int mbh=0,mbl=0; int fangx(Node wanj,Node xiangz); void solve(Node wanj,Node xiangz); int main() { //freopen("wyin1.in","r",stdin); //freopen("wyout1.out","w",stdout); scanf("%d%d%d",&n,&m,&s); for(int i=0;i<m;++i) { scanf("%s",gezi[i]); for(int j=0;j<strlen(gezi[i]);++j) { if(gezi[i][j]=='1') { wjh=i; wjl=j; gezi[i][j]='0'; } else if(gezi[i][j]=='2') { mbh=i; mbl=j; gezi[i][j]='0'; } else if(gezi[i][j]=='3') { xzh=i; xzl=j; gezi[i][j]='0'; } } } int t; for(int i=0;i<s;++i) { scanf("%d",&t); scanf("%s",cz); Node wj={wjh,wjl}; Node xz={xzh,xzl}; solve(wj,xz); } //system("pause"); return 0; } void solve(Node wanj,Node xiangz) { int flag=0; //printf("cz:%s\n",cz); for(int i=0;i<strlen(cz);++i) { if(cz[i]=='u') { if(fangx(wanj,xiangz)==3)//玩家在下边 { if(xiangz.ha>0 && (gezi[xiangz.ha-1][xiangz.li]=='0'||gezi[xiangz.ha-1][xiangz.li]=='2')) { xiangz.ha--; wanj.ha--; } } else if(wanj.ha>0 && (gezi[wanj.ha-1][wanj.li]=='0'||gezi[wanj.ha-1][wanj.li]=='2')) { wanj.ha--; } } else if(cz[i]=='d') { if(fangx(wanj,xiangz)==2)//玩家在上边 { if(xiangz.ha<m-1 && (gezi[xiangz.ha+1][xiangz.li]=='0'||gezi[xiangz.ha+1][xiangz.li]=='2')) { xiangz.ha++; wanj.ha++; } } else if(wanj.ha<m-1 && (gezi[wanj.ha+1][wanj.li]=='0'||gezi[wanj.ha+1][wanj.li]=='2')) { wanj.ha++; } } else if(cz[i]=='l') { if(fangx(wanj,xiangz)==1)//玩家在右边 { if(xiangz.li>0 && (gezi[xiangz.ha][xiangz.li-1]=='0'||gezi[xiangz.ha][xiangz.li-1]=='2')) { xiangz.li--; wanj.li--; } } else if(wanj.li>0 && (gezi[wanj.ha][wanj.li-1]=='0'||gezi[wanj.ha][wanj.li-1]=='2')) { wanj.li--; } } else if(cz[i]=='r') { if(fangx(wanj,xiangz)==0)//玩家在左边 { if(xiangz.li<n-1 && (gezi[xiangz.ha][xiangz.li+1]=='0'||gezi[xiangz.ha][xiangz.li+1]=='2')) { xiangz.li++; wanj.li++; } } else if(wanj.li<n-1 && (gezi[wanj.ha][wanj.li+1]=='0'||gezi[wanj.ha][wanj.li+1]=='2')) { wanj.li++; } } if(xiangz.ha==mbh && xiangz.li==mbl) { flag=1; break; } } if(flag) printf("YES\n"); else printf("NO\n"); } int fangx(Node wanj,Node xiangz) { if(wanj.li==xiangz.li-1 && wanj.ha==xiangz.ha) return 0;//玩家在箱子左边 else if(wanj.li==xiangz.li+1 && wanj.ha==xiangz.ha) return 1;//玩家在右边 else if(wanj.li==xiangz.li && wanj.ha==xiangz.ha-1) return 2;//玩家在上边 else if(wanj.li==xiangz.li && wanj.ha==xiangz.ha+1) return 3;//玩家在下边 else return 4; }
相关文章推荐
- 网易游戏2016实习生招聘在线笔试——题目1 : 推箱子
- 网易游戏2016实习生招聘在线笔试 推箱子
- 网易游戏2016实习生招聘笔试题目--推箱子
- 网易游戏2016研发实习生招聘在线编程题目 推箱子
- 网易游戏2016实习生招聘在线笔试之连连看
- hihocoder 网易游戏2016实习生招聘在线笔试 解题报告
- 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——A题 Amusing Digits
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(图像处理)
- 2017网易游戏雷火盘古实习生招聘笔试真题:推箱子 [python]
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(一起消消毒)
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场 C
- 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——C题 Complicated Expression
- 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——D题 Difficult Player Grouping
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(神奇的数)
- 2017网易游戏雷火盘古实习生招聘笔试真题 推箱子
- 网易游戏2016实习生招聘笔试题目--井字棋
- 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——B题 Best Compression Algorithms
- 2016网易实习生招聘笔试题:已知一般App版本为1.0.0/1.0.1/1.2.3,其符合a.b.c的规则。将排序不规则,约为100w个版本号进行从小到大排序
- 网易互娱2017实习生招聘在线笔试第一场题目解析
- 2017网易游戏雷火盘古实习生招聘笔试:字符串编码