Description
最近有一部电视剧很受欢迎,其中一个故事是主人公在仓库里看不到任何货物盲跑
,也就是说,用记忆来确认你的位置,去你想去的地方。
gsy 最近也想试试自己的记忆力,于是她找到了类似的游戏。
游戏一开始就会给玩家看n?m地图,地图 '*' 表示墙,'.' 表示空地,## 说明玩家的位置,当然,玩家一开始的位置一定是空地
但一旦玩家开始移动,地图就会变黑,也就是说,玩家不知道他们的角色现在在哪里,直到他们移动 1001 之后,地图将重新显示
游戏有四种操作:
- U 向上走一步
- L 向左走一步
- D 向下走一步
- R 向右走一步
但很明显,如果 gsy 下一步将到达墙壁或地图边界,这一步将跳过
比如当地图为
*# ..
此时发布的操作为LRD, 因为左边是墙的右边是递推边界,所以LR两次操作无效
三次操作后,地图会变成
*. .#
现在 gsy 已经走了p但她只记得自己做了什么手术,却不知道自己到底去了哪里,所以她想向你求助。
请你告诉gsy现在的地图是什么样的?
Input
第一行包括三个正整数n,m,p表示地图大小为n?m,gsy 已经走了p步 接下来n行,每行包含m字符的含义如题所示 接下来包括一行,共p每个字符表示一个字符gsy一次操作,题目保证只会出现U,L,D,R这四个字符。
对于60%的数据,n,m≤30,p≤60
对于100%的数据,n,m≤100,p≤1000
Output
对于100%的数据,n,m≤100,p≤1000
Sample Input
2 2 3
* #
. .
LRD
Sample Output
* .
. #
分析:模拟行走路径。在每次移动之前,首先判断它是否会超过边界或不是空间。如果你合法前进,改变地图,改变角色坐标,最后输出地图。
#include <stdio.h> char a[105][105],b[1005]; int main() { int n,m,q,i,j,x,y; while(~scanf("%d%d%d",&n,&m,&q)){ for(i=1;i<=n;i ){ for(j=1;j<=m;j ){ scanf(" %c",&a[i][j]); //建立初始地图 if(a[i][j]=='#') x=i,y=j; //记录出生点 } } scanf("%s",b); ///阅读移动指令 for(i=0;i<q;i ){ if(b[i]=='L'&&y-1>0&&a[x][y-1]=='.') a[x][y-1]='#',a[x][y]='.',y--; ///更新地图,更新角色坐标 else if(b[i]=='R'&&y 1<=m&&a[x][y 1]=='.') a[x][y 1]='#',a[x][y]='.',y ; else if(b[i]=='D'&&x 1<=n&&a[x 1][y]=='.') a[x 1][y]='#',a[x][y]='.',x ; else if(b[i]=='U'&&x-1>0&&a[x-1][y]=='.') a[x-1][y]='#',a[x][y]='.',x--; } for(i=1;i<=n;i ){ for(j=1;j<=m;j ) printf("%c",a[i][j]); printf("\n"); } } return 0; }