搜索专题(DFS)HDU 1072-Nightmare
来源:互联网 发布:python中关键字参数 编辑:程序博客网 时间:2024/06/05 03:01
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1072
思路分析:
与一般的限时迷宫问题不同的地方在于,有还原点可以重置炸弹爆炸时间,这就涉及到一个问题,多次走到还原点的话就会陷入死循环了,对于这个问题,有两种解决方案,一种是走过还原点之后把它变成墙,因为两次走过同一个还原点没有任何意义,另一种是用记忆化搜索,及时记录下走到每个点的总时间和剩余时间,两次走过同一个点,要么缩短了总时间,要么增长了剩余时间,不符合就剪掉。
代码实现(DFS):
#include"cstdio"#include"cstring"#include"algorithm"using namespace std;int T,N,M;int sx,sy;int maze[10][10];int time[10][10];//花费总时间int rtime[10][10];//炸弹爆炸剩余时间int mt[4];int dx[]= {-1,1,0,0};int dy[]= {0,0,-1,1};int mint;int DFS(int x,int y,int t,int rt){ if(rt==0||(mint!=0&&t>=mint))//超出或等于之前计算出的最少时间,剪去 return 0; if(maze[x][y]==3) { return t; } int a,b,z; for(int i=0; i<4; i++) { a=x+dx[i]; b=y+dy[i]; if(a<0||b<0||a>=N||b>=M||maze[a][b]==0) continue; if(time[a][b]!=0&&time[a][b]<=t+1&&rtime[a][b]>=rt-1)//要么减少总时间,要么增加剩余时间 continue; time[a][b]=t+1; rtime[a][b]=rt-1; if(maze[a][b]==4&&rt!=1)//不要忘了题目条件,如果时间刚好为0炸弹还是要炸的 { rt=6; rtime[a][b]=6; } if(z=DFS(a,b,t+1,rtime[a][b]))//求出最少时间 { if(mint==0||mint>z) mint=z; } } return mint;}int main(){ scanf("%d",&T); while(T--) { mint=0; memset(time,0,sizeof(time)); memset(rtime,0,sizeof(rtime)); scanf("%d%d",&N,&M); for(int i=0; i<N; i++) for(int j=0; j<M; j++) { scanf("%d",&maze[i][j]); if(maze[i][j]==2) { sx=i; sy=j; } } int ans=DFS(sx,sy,0,6); if(ans) printf("%d\n",ans); else puts("-1"); } return 0;}
0 0
- 搜索专题(DFS)HDU 1072-Nightmare
- HDU 1072 Nightmare(搜索-DFS)
- HDU 1072 Nightmare(搜索-DFS)
- hdu 1072 Nightmare(DFS)
- HDU 1072 Nightmare(搜索)
- hdu 1072 Nightmare(dfs)(转)
- HDU 1072Nightmare(dfs+剪枝)
- hdu-1072 Nightmare(DFS+剪枝)
- hdu 1072 Nightmare dfs+剪枝
- HDU 1728 逃离迷宫 + HDU 1072 Nightmare(bfs+dfs)
- hdu 1072 Nightmare 搜索,bfs
- hdu 1072 Nightmare(BFS法和DFS法)
- HDU 1072 Nightmare(DFS或BFS+剪枝)
- HDOJ 1072 Nightmare (DFS)
- BFS:HDU-1072-Nightmare(记忆化搜索)
- Nightmare(HDU 1072)
- 搜索专题(DFS)HDU 1016-Prime Ring Problem
- 搜索专题(DFS&&BFS&&剪枝)HDU 1728-逃离迷宫
- 终于开始了!
- 动态规划-股票买卖总结
- python数据分析 -- numpy库初识
- 合并静态库,请不要再用ar x了,坑啊
- mtk 修改 1-开机部分
- 搜索专题(DFS)HDU 1072-Nightmare
- RxAndroid的使用
- oracle学习之:查看用户的信息(状态、默认表空间等)
- 桌面ie图标无法删除怎么办
- VC界面美化
- 洛谷 P1724 东风谷早苗
- 使用 PropertyAttribute和PropertyDrawer
- MySQL 5.5 InnoDB 锁等待
- 步入软件开发2年感悟