HDU 4213-Sokoban
来源:互联网 发布:青云志网游全套源码 编辑:程序博客网 时间:2024/05/21 21:45
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4213
题意:
推箱子游戏
给你一张地图,按照指令是否能够将箱子都推到目标地点
思路:
直接模拟就好了。
不过,要注意一些地方:
(1)注意'B'和'b','W'和'w'的区别,例如下面的这组测试数据:
输出:
(2)若是执行到某一段指令时,已经将将箱子全部送到目标地点,后面的指令就不再执行了
例如这组测试数据:
输出:
#include<cstdio>#include<cstring>#define maxn 20char map[maxn][maxn];bool aim[maxn][maxn];//箱子要推到的地方bool complete;//能否完成任务int dirx[4]={-1,1,0,0},diry[4]={0,0,-1,1};//上下左右int startx,starty;//起点int n,m;//地图的长和宽void run(char *s){for(;*s;s++){//确定此时所走的方向int dir;if(*s=='U') dir=0;else if(*s=='D') dir=1;else if(*s=='L') dir=2;else dir=3;int tx=startx+dirx[dir],ty=starty+diry[dir];//下一步要走的地方if(map[tx][ty]!='#'){int nextx=tx+dirx[dir],nexty=ty+diry[dir];bool flag=false;//如果推的是箱子,那么,箱子后面就不能是箱子也不能是墙if(map[tx][ty]=='b'&&map[nextx][nexty]!='b'&&map[nextx][nexty]!='#'){map[tx][ty]='w';map[nextx][nexty]='b';map[startx][starty]='.';startx=tx,starty=ty;flag=true;}else if(map[tx][ty]=='.'||map[tx][ty]=='+'){map[tx][ty]='w';map[startx][starty]='.';startx=tx,starty=ty;}if(flag){int t1=0,t2=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(aim[i][j]){t1++;if(map[i][j]=='b')t2++;}}if(t1==t2)//已经成功把所有的箱子都推到目标{complete=true;return;}}}}}int main(){int cas=1;while(scanf("%d %d",&n,&m),n||m){int i,k;complete=false;for(i=0;i<n;i++)for(k=0;k<m;k++){scanf(" %c",&map[i][k]);//不要写成scanf("%c",&map[i][k]);aim[i][k]=false;if(map[i][k]=='+'||map[i][k]=='B'||map[i][k]=='W')//这里最坑爹,要考虑到人在目标地点和箱子在目标地点的情况{aim[i][k]=true;if(map[i][k]!='+')map[i][k]+=32;}if(map[i][k]=='w')startx=i,starty=k;}char str[100];scanf("%s",str);run(str);printf("Game %d: ",cas++);puts(complete?"complete":"incomplete");for(i=0;i<n;i++){for(k=0;k<m;k++){if(aim[i][k]){if(map[i][k]=='b'||map[i][k]=='w')map[i][k]-=32;elsemap[i][k]='+';}printf("%c",map[i][k]);}printf("\n");} }return 0;}
- HDU 4213-Sokoban
- hdu 4213 Sokoban(模拟)
- 项目实战-sokoban
- G(1856): Sokoban
- poj 2384 Harder Sokoban Problem
- Sokoban 推箱子 C++代码
- 用C#+XML技术开发游戏Sokoban Pro
- 推箱子 Sokoban(华中农业比赛)
- 文章标题 CSU 1856: Sokoban(模拟)
- How to build a good Sokoban level (如何设计高质量的推箱子关卡)
- Sokoban(仓库番,推箱子)自动求解与辅助求解工具
- HDU 4213 模拟
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- 使用缓存的9大误区(下)
- Visual C++编程实现摄像头视频捕捉(2)
- android修改包名的问题
- QScrollArea
- pssac安装
- HDU 4213-Sokoban
- js使用post传值
- Powerdesigner 创建、打开工程提示"打印错误"
- C++ 对象的内存布局(上)
- ppstream在64位kubuntu上的安装问题
- APN 建立PDP流程 .
- SWUN 狼人杀
- 从程序员到技术总监,分享10年开发经验
- ubuntu与windows共享文件夹(samba)