hdu 2821 学习一点dfs的小技巧吧。。 还是自己太弱了
2016-10-11 10:44
351 查看
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int r,c,s,flag; int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; char mapp[25][25],road[1000],d[5] = {"DURL"}; bool check(int x,int y) { if(x < 0 || x >= r || y < 0 || y >= c) return false; return true; } void dfs(int x,int y,int num) //表示出发位置为(x,y),已经消灭了num个箱子 { if(num >= s) { road[num] = 0; flag = 1; return; } for(int k = 0; k < 4; k++) { int i = x + dir[k][0]; int j = y + dir[k][1]; if(!check(i,j) || mapp[i][j]) continue; //(1)下一步就走出界外,或者与箱子之间没有空格 while(check(i,j) && !mapp[i][j])//(2)对于不能临时改变方向的搜索这个方法比较适用 i += dir[k][0], j += dir[k][1]; if(!check(i + dir[k][0],j + dir[k][1])) continue; //到达棋盘边缘,不能推 int t = mapp[i][j]; mapp[i+dir[k][0]][j+dir[k][1]] += t - 1; mapp[i][j] = 0; road[num] = d[k]; dfs(i,j,num+1); if(flag) return; mapp[i+dir[k][0]][j+dir[k][1]] -= t - 1;//状态的恢复过程 mapp[i][j] = t; } } int main() { while(scanf("%d%d",&c,&r)!=EOF) { s = flag = 0; for(int i = 0; i < r; i++) { getchar(); scanf("%s",mapp[i]); for(int j = 0; j < c; j++) { if(mapp[i][j] == '.') mapp[i][j] = 0; else mapp[i][j] -= 'a' - 1; s += mapp[i][j]; } } for(int i = 0; i < r; i++) { if(flag) break; for(int j = 0; j < c; j++) { if(mapp[i][j]) continue; dfs(i,j,0); if(flag == 1) { printf("%d\n%d\n",i,j); printf("%s\n",road); break; } } } } return 0; }
相关文章推荐
- 昨晚开始了为期3个月的初级德语课,课上大家跟老师咿咿呀呀,仿佛回到了蒙学时代,感觉还是不错的!在blog里增加一个GERMAN随笔分类主要是方便自己随时学习,勿怪!Vielen Dank!
- 考研还是工作?----- 一点自己的看法
- HDU 1142 SPFA + DFS记忆搜索 学习了!!
- DFS-hdu-2821-Pusher
- 学习SEO关键的还是要自己去学习
- 网页常用小技巧(转帖+自己添加了一点)
- hdu 2821 Pusher(dfs)
- 记录自己学习过程中的每一点收获
- 初学习cocos2d小结(感冒了,几行代码都记不住...稍微复杂一点的动作序列看不下去,还是总结一下这两天看的东西)
- DFS-hdu-2821-Pusher
- (转)ASP PHP JSP 比较; 自己学习过一点asp,jsp。感觉笔者写的不错!
- HDU 3953题解 看到标题后才知道自己上当了,他妹的!哎,还是经验不足啊!
- 关于本科学习GIS的一点感悟,不知道自己该干些什么的学弟学妹们可以借鉴一下……
- 非常有用的小技巧:使用Dropbox和Google Reader来跟踪自己的学习情况
- 还是要学习一点网络通讯的基本原理
- 今天心情不错,对CDocManager和CWinApp作了一点粗劣的学习,写出来勉励自己。
- 还是说学习,一点牢骚
- hdu 1198 dfs(还是水坑变型题)农田灌溉
- hdu 2821 dfs
- hdu 2821 Pusher (dfs)