hdu 4213 Sokoban(模拟)
2013-11-27 07:46
399 查看
一道比较简单的模拟题,不知道之前为什么没有做出来。
记录w所在的位置,对于w的下一个动作所影响的位置进行判断,如果下一个位置是‘b'或’B',还要对下下个位置进行判断。
记录w所在的位置,对于w的下一个动作所影响的位置进行判断,如果下一个位置是‘b'或’B',还要对下下个位置进行判断。
#include<stdio.h> #include<string.h> #define N 16 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; char map ,s[56]; int m,n; int x,y; int test(int x,int y) { if(x<1||x>m||y<1||y>n) return 0; return 1; } void fun(int k) { int tx,ty; tx=x+dir[k][0];ty=y+dir[k][1]; int flag=0; if(test(tx,ty)) { if(map[tx][ty]=='.') map[tx][ty]='w'; else if(map[tx][ty]=='#') flag=1; else if(map[tx][ty]=='+') map[tx][ty]='W'; else if(map[tx][ty]=='b'||map[tx][ty]=='B') { int ttx,tty; ttx=tx+dir[k][0];tty=ty+dir[k][1]; if(test(ttx,tty)) { if(map[tx][ty]=='b') { if(map[ttx][tty]=='.') map[ttx][tty]='b',map[tx][ty]='w'; else if(map[ttx][tty]=='#') flag=1; else if(map[ttx][tty]=='+') map[ttx][tty]='B',map[tx][ty]='w'; else if(map[ttx][tty]=='b'||map[ttx][tty]=='B') flag=1; } else if(map[tx][ty]=='B') { if(map[ttx][tty]=='.') map[ttx][tty]='b',map[tx][ty]='W'; else if(map[ttx][tty]=='#') flag=1; else if(map[ttx][tty]=='+') map[ttx][tty]='B',map[tx][ty]='W'; else if(map[ttx][tty]=='b'||map[ttx][tty]=='B') flag=1; } } } } if(!flag) { if(map[x][y]=='w') map[x][y]='.'; else if(map[x][y]=='W') map[x][y]='+'; x+=dir[k][0],y+=dir[k][1]; return ; } return ; } int judge() { for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) if(map[i][j]=='+'||map[i][j]=='b') return 0; } return 1; } int main() { int cnt=1; while(scanf("%d%d",&m,&n),m+n) { getchar(); for(int i=1;i<=m;i++) { gets(map[i]+1); for(int j=1;j<=n;j++) { if(map[i][j]=='w'||map[i][j]=='W') x=i,y=j; } } gets(s); int flag=0; int ln=strlen(s); for(int i=0;i<ln;i++) { if(s[i]=='U') fun(0); else if(s[i]=='D') fun(1); else if(s[i]=='L') fun(2); else if(s[i]=='R') fun(3); if(judge()) { flag=1; break; } } if(!flag) printf("Game %d: incomplete\n",cnt++); else printf("Game %d: complete\n",cnt++); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) printf("%c",map[i][j]); printf("\n"); } } return 0; }
相关文章推荐
- 手机厂商竞相推“新品牌”,想明白了吗?
- makefile及条件编译
- HTML5开发中使用MVC模式
- Makefile条件编译debug版和release版
- 熬之滴水成石:最想深入了解的内容--windows内核机制(11)
- Codeforces Round #215 (diy.2) B.Sereja and Suffixes
- Java 文件下载
- 淘宝网架构
- Android--SurfaceView播放视频
- linux 新建用户、用户组 以及为新用户分配权限
- Facebook数据库工具Flashcache初探
- 股市风云
- 编程中的runtime_error问题
- flashcache的实现与分析
- Python动态类型理解
- 淘宝的数据库系统
- rsync与inotify 数据同步
- php入门教程 第一个php程序
- PHP获取当前url路径的函数以及服务器变量
- PHP获取当前url的具体方法