poj 3009 冰壶 DFS 一个方向搜查到底
来源:互联网 发布:胡歌忘记时间知乎 编辑:程序博客网 时间:2024/05/17 01:29
题意:
冰壶可以上下左右运动(前提上下左右的第一个位置为空)。碰到冰块则停止,冰块也将被破坏。问懂多少次能达到终点。
一个方向搜到底:
代码:
#include <iostream>#include <algorithm>using namespace std;int map[30][30];int w,h;int minn=300000;void dfs(int x,int y,int sum,int a,int b) //a,b记录下一次运动的方向。{if(x<0||x>=h||y<0||y>=w||sum>10)return ;if(map[x][y]==3){minn=min(sum,minn);return ;}if(map[x+a][y+b]==0||map[x+a][y+b]==3)//如果下一次为空,接着运动。dfs(x+a,y+b,sum,a,b);else if(map[x+a][y+b]==1) //否则,停止,换方向。{map[x+a][y+b]=0;if(map[x+1][y]!=1)dfs(x,y,sum+1,1,0);if(map[x-1][y]!=1)dfs(x,y,sum+1,-1,0);if(map[x][y+1]!=1)dfs(x,y,sum+1,0,1);if(map[x][y-1]!=1)dfs(x,y,sum+1,0,-1);map[x+a][y+b]=1;}}int main(){while(cin>>w>>h&&w&&h){minn=300000;int x,y;memset(map,0,sizeof(map)); //郁闷。没初始化,WA一次。for(int i=0;i<h;i++)for(int j=0;j<w;j++){cin>>map[i][j];if(map[i][j]==2){map[i][j]=0;x=i;y=j;}}if(map[x+1][y]!=1) //判断能否运动。dfs(x,y,1,1,0);if(map[x-1][y]!=1)dfs(x,y,1,-1,0);if(map[x][y+1]!=1)dfs(x,y,1,0,1);if(map[x][y-1]!=1)dfs(x,y,1,0,-1);if(minn<=10)cout<<minn<<endl;elsecout<<"-1\n";}return 0;}
0 0
- poj 3009 冰壶 DFS 一个方向搜查到底
- POJ 3009 dfs
- POJ 3009 DFS +剪枝
- DFS poj 3009
- poj 3009 dfs
- poj 3009 (DFS)
- poj 3009 dfs + 恢复
- poj 3009 dfs+剪枝
- poj 3009 dfs
- poj 3009 (dfs)
- poj 3009 dfs
- poj 3009 DFS +回溯
- poj 3009 DFS
- poj 3009(dfs)
- POJ 3009 dfs暴搜
- POJ 3009(Dfs)
- POJ 3009 DFS+剪枝
- poj 3009 dfs
- 部分函数的使用整理
- log4j 输出的目的地
- 互联网运营
- (转) 软件开发 签合同问题 需要注意什么
- SpringMVC入门教程及其原理讲解和实例代码下载
- poj 3009 冰壶 DFS 一个方向搜查到底
- CURL 库的基本使用-----转自nk_ysg
- log4j 配置相关说明
- java字符串常量池知识
- 主成分分析方法PCA总结
- python 中strftime用法
- JAVA调用外部程序阻塞问题
- 成员函数的重载、覆盖与隐藏
- Linux下Tomcat重新启动