10384 - The Wall Pushers
来源:互联网 发布:php 二维数组过滤 编辑:程序博客网 时间:2024/05/16 07:35
我有话说:
用了迭代加深搜索。主要就考虑两类。没有墙和有墙但是能推的两种情况。分别进行枚举。比较麻烦的不是程序过程,而是由于题目中x y坐标的设定,以及推墙后的运算,要有清晰的思路。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int n=4;const int m=6;char* dir="WNES";// 2//1 4// 8int dirv[4]={1,2,4,8};int dirv2[4]={4,8,1,2};const int dx[]={0,-1,0,1};//参看题目。x,y坐标系和平常不一样const int dy[]={-1,0,1,0};int maxd,G[10][10],vis[10][10],ans[100];int dfs(int x,int y,int d){ int x1,y1,x2,y2; if(d==maxd||vis[x][y])return false; if(x==0||x==n+1||y==0||y==m+1)return true; vis[x][y]=1; for(int i=0;i<4;i++) { x1=x+dx[i];y1=y+dy[i]; x2=x1+dx[i];y2=y1+dy[i]; if((G[x][y]&dirv[i])==0){//没有墙 ans[d]=i; if(dfs(x1,y1,d+1)){ vis[x][y]=0; return 1; } }else if((G[x1][y1]&dirv[i])==0){//有墙,但是可以推 ans[d]=i; // __ 假设这么推G[x][y]-2 G[x][y]-=dirv[i]; // |__|| | G[x1][y1]-8+2 G[x1][y1]+=dirv[i]-dirv2[i];//| || | G[x2][y2]+2 G[x2][y2]+=dirv2[i]; // if(dfs(x1,y1,d+1)){ vis[x][y]=0; G[x][y]+=dirv[i]; G[x1][y1]-=dirv[i]-dirv2[i]; G[x2][y2]-=dirv2[i]; return 1; } G[x][y]+=dirv[i]; G[x1][y1]-=dirv[i]-dirv2[i]; G[x2][y2]-=dirv2[i]; } } vis[x][y]=0; return 0;}int main(){ for(int i=1;i<=4;i++){ G[i][0]=1;G[i][m+1]=4; } for(int i=1;i<=6;i++){ G[0][i]=2;G[n+1][i]=8; } int x,y; while(scanf("%d%d",&y,&x)==2) { if(x==0&&y==0)break; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&G[i][j]); maxd=1; while(!dfs(x,y,0))maxd++; for(int i=0;i<maxd-1;i++) printf("%c",dir[ans[i]]); printf("\n"); } return 0;}
0 0
- 10384 - The Wall Pushers
- The Wall Pushers (UVA
- The Wall Pushers UVA
- UVa 10384:The Wall Pusher(IDA*)
- UVA 10384(p219)----The Wall Pusher
- Pink Floyd -- The Wall
- hdu2124 Repair the Wall
- hdu1543 Paint the Wall
- hdu1543 Paint the Wall
- Repair the Wall+贪心
- A. The Wall
- Paint The Wall hdu4391
- codeforces The Wall - 题解
- Repair the Wall
- [cf398B]Painting The Wall
- Fixing the Great Wall
- 2124:Repair the Wall
- hdu3669 Cross the Wall
- Shell脚本需要注意的问题汇总
- 安卓 图片大小不变的情况下裁剪图片
- Java synchronized 同步原语 详解
- java中interface使用之多态接口动态加载
- android 解决ViewPager双层嵌套的滑动问题
- 10384 - The Wall Pushers
- 网络图片下载与缓存
- ubuntu防火墙设置
- #leetcode#One Edit Distance
- 关于activiti数据库连接超时的问题
- r画双坐标
- java读取xml文件
- MongoDB中数据导入
- python中的os.path.dirname(__file__)的使用