poj3009 Curling 2.0 dfs
来源:互联网 发布:mysql 自定义函数语法 编辑:程序博客网 时间:2024/06/01 07:19
题意:扔石头,在不碰到墙壁和终点的时候石头直线上下左右移动,石头碰到墙壁可以停止继续向其他方向扔,被砸到的墙壁会碎掉变没,直到到达终点或者扔出屏幕为止(不能向旁边就是墙壁的方向扔),最多扔10次,超过10次或者扔出屏幕就算失败,输出-1,成功的话输出扔的次数
dfs搜索,先走一步判断有没有越界、有没有撞墙、有没有到终点,如果都没有就循环直到撞到墙壁,或者越界,或者到终点,撞到墙壁就把墙壁所在数组设为0,步数加1,然后dfs这个行为,超过10步直接结束失败。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>#include<set>#include<map>#include<stack>#include<queue>#include<vector>using namespace std;int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},minstep,w,h;char m[21][21];void dfs(int x,int y,int s){ int i,nx,ny; if(s>=minstep)return ; for(i=0;i<4;i++) { nx=x+dx[i];ny=y+dy[i]; if(nx<0||nx>=w||ny<0||ny>=h||m[ny][nx]=='1')continue; if(m[ny][nx]=='3') { minstep=s+1; continue; } while(1) { nx+=dx[i];ny+=dy[i]; if(nx<0||nx>=w||ny<0||ny>=h)break; else if(m[ny][nx]=='3') { minstep=s+1; break; } else if(m[ny][nx]=='1') { m[ny][nx]='0'; dfs(nx-dx[i],ny-dy[i],s+1); m[ny][nx]='1'; break; } } }}int main(){ int i,j,x,y; while(cin>>w>>h&&(w!=0||h!=0)) { minstep=11; for(i=0;i<h;i++) { for(j=0;j<w;j++) { cin>>m[i][j]; if(m[i][j]=='2') { x=j;y=i; } } } dfs(x,y,0); if(minstep<=10)cout<<minstep<<endl; else cout<<-1<<endl; } return 0;}
0 0
- POJ3009:Curling 2.0(DFS)
- POJ3009 Curling 2.0(DFS)
- POJ3009 Curling 2.0 DFS
- POJ3009 Curling 2.0【DFS】
- POJ3009 Curling 2.0(DFS)
- POJ3009-Curling 2.0-DFS
- poj3009 Curling 2.0 dfs
- POJ3009 Curling 2.0【DFS】
- poj3009 Curling 2.0 DFS搜索
- POJ3009 Curling 2.0 DFS 深搜
- poj3009 Curling 2.0(DFS回溯)
- POJ3009 Curling 2.0(dfs+剪枝)
- POJ3009 Curling 2.0(DFS)
- POJ3009 Curling 2.0(DFS)
- POJ3009 Curling 2.0 (DFS)
- POJ3009 Curling 2.0(DFS+剪枝)
- POJ3009 Curling 2.0 (dfs入门题)
- 【poj3009】curling 2.0——dfs
- A. Lesha and array splitting----贪心
- (原创)我对未来的人类的发展,以及AI技术发展的一些思考。
- java类初始化
- 2016年蓝桥杯 —— 第十题
- nginx学习笔记(5):高级数据结构ngx_rbtree_t
- poj3009 Curling 2.0 dfs
- 2017.3.5
- CSS学习笔记(三)--CSS选择器
- 发现问题,解决问题
- Android编程可参考博客
- Linux命令-查看进程以及进程的删除
- gethibernatetemplate find条件查询方法
- 母牛的故事
- 渐进增强与优雅降级