poj-3009 Curling 2.0-DFS
2015-08-18 14:25
441 查看
题干很长这里就不复制了,题意的话估计看图就能懂个差不多,这里简单说一下,一个球在2为起点的位置要到达终点3,途中不碰到墙壁球的移动是不会停止的,并且在触碰墙壁停止后,被碰的墙壁会消失。最后得出到达3需要的最少步数。
思路:还是平常的DFS,不过需要多加一点东西就是了,比如点的移动时用一个循环使其向一个方向一直移动到碰到墙或走出边界。该题不需要vis标记数组,因为存在重复走点的情况。注意DFS中加入 if(step>10||step>=ans) return; 可以大大优化时间。(不加一定会TLE)
思路:还是平常的DFS,不过需要多加一点东西就是了,比如点的移动时用一个循环使其向一个方向一直移动到碰到墙或走出边界。该题不需要vis标记数组,因为存在重复走点的情况。注意DFS中加入 if(step>10||step>=ans) return; 可以大大优化时间。(不加一定会TLE)
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #define INF 0x3f3f3f3f using namespace std; int n,m,flag,ans; int sx,sy; int Map[50][50]; int vis[50][50]; void DFS(int x,int y,int w,int step) { if(step>10||step>=ans) return; if(Map[x][y]==0||Map[x][y]==3||Map[x][y]==2) { while(1) { if(Map[x][y]==2) {Map[x][y]=0;break;} if(Map[x][y]==1) { Map[x][y]=0; if(w==1) x++; else if(w==2) y--; else if(w==3) x--; else if(w==4) y++; break; } if(Map[x][y]==-1) return ; if(Map[x][y]==3) { flag=1; if(ans>step) ans=step; return ; } if(w==1) x--; else if(w==2) y++; else if(w==3) x++; else if(w==4) y--; } } if(Map[x-1][y]!=1&&Map[x-1][y]!=-1) DFS(x-1,y,1,step+1); if(Map[x][y+1]!=1&&Map[x][y+1]!=-1) DFS(x,y+1,2,step+1); if(Map[x+1][y]!=1&&Map[x+1][y]!=-1) DFS(x+1,y,3,step+1); if(Map[x][y-1]!=1&&Map[x][y-1]!=-1) DFS(x,y-1,4,step+1); if(w==1) Map[x-1][y]=1; else if(w==2) Map[x][y+1]=1; else if(w==3) Map[x+1][y]=1; else if(w==4) Map[x][y-1]=1; step--; } int main() { int i,j; while(scanf("%d%d",&m,&n),m||n) { ans=INF; flag=0; memset(Map,-1,sizeof(Map)); for (i=1;i<=n;i++) { for (j=1;j<=m;j++) { scanf("%d",&Map[i][j]); if(Map[i][j]==2) sx=i,sy=j; } } DFS(sx,sy,0,0); if(flag) { if(ans<=10) printf("%d\n",ans); else printf("-1\n"); } else printf("-1\n"); } }
相关文章推荐
- lvs负载均衡集群之NAT模式
- easyUI奇葩事件-textbox的onblur失效
- Android笔记:ListView
- vm设置静态ip
- 畅通工程续
- 古华山一条路,狭路相逢勇者胜
- URLRewriteFilter usage - use-query-string="true" and use-context="true"
- linux新建用户和用户组
- java实现栈
- 数据结构—进制间转换
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- 公告:C币兑换平台系统停站维护公告
- 《Node.js开发指南》知识整理
- 浅谈数据结构-Boyer-Moore算法
- Java程序的三种输入
- 安装Sass和Compass
- Choose the best route
- spark 官网例子 统计一篇文章包含字母a的个数
- zoj 3870 Team Formation(异或运算)
- Spring的IOC、Spring对象初始化bean时机、Spring容器生命周期