BFS题目学习总结
来源:互联网 发布:澳大利亚怎么淘宝 编辑:程序博客网 时间:2024/05/18 01:03
博文持续更新中,记录BFS类题目的总结,不断学习,不断记录。
(1)hdu1253胜利大逃亡 http://acm.hdu.edu.cn/showproblem.php?pid=1253
思路:简单的bfs,但是我写这个题卡了一下午,简直要崩溃了,要总结下,不要乱用memset去填充,wtf程序老师莫名的崩掉;要熟练运用continue;要分清if if else if;最重要的就是能用scanf尽量用scanf,一开始用cin各种TLE,真的要疯了。
代码:
#include <iostream>#include <queue>#include <cstdio>using namespace std;int a,b,c,t;int Map[51][51][51];int dir[6][3]= {{1,0,0}, {-1,0,0}, {0,1,0}, {0,-1,0}, {0,0,1}, {0,0,-1}};struct point{ int x,y,z; int time;};int dfs(){ if(a==1&&b==1&&c==1) return 0; queue<point>Q; point start;//定义起始点 start.x=start.y=start.z=start.time=0; Q.push(start);Map[0][0][0]=1; point now,next;//dingyi while(!Q.empty()){ now=Q.front();Q.pop(); for(int i=0;i<6;i++){ next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; next.z=now.z+dir[i][2]; next.time=now.time+1; if(next.x<0||next.x>=a||next.y<0||next.y>=b||next.z<0||next.z>=c) continue; if(Map[next.x][next.y][next.z]==0){ if(next.x==a-1&&next.y==b-1&&next.z==c-1) return next.time; Q.push(next); Map[next.x][next.y][next.z]=1; } } } return -1;}int main(){ int N;scanf("%d",&N); while(N--){ scanf("%d%d%d%d",&a,&b,&c,&t); for(int i=0;i<a;i++) for(int j=0;j<b;j++) for(int k=0;k<c;k++) scanf("%d",&Map[i][j][k]); if(a+b+c-3>t){ printf("-1\n"); continue; } if(Map[a-1][b-1][c-1]==1){ printf("-1\n"); continue; } int ans=dfs(); if(ans<=t) printf("%d\n",ans); else printf("-1\n"); }}
1 0
- BFS题目学习总结
- BFS学习总结
- BFS学习总结
- BFS,DFS等搜索题目总结
- DFS和BFS学习总结
- 基础BFS 邻接矩阵Flood fill 算法题目总结
- 机器学习面试题目总结
- 机器学习面试题目总结
- ACM HDU BFS 题目
- 题目 英雄 (BFS)
- BFS题目集合
- bfs题目小结
- bfs题目集锦
- DFS、BFS搜索+题目
- POJ 1915 BFS题目
- 树状数组学习以及题目总结
- 树状数组学习以及题目总结
- 树状数组学习以及题目总结
- WPF手写识别
- 队列工厂之(MSMQ)
- android 2C学习
- 从强化学习基本概念到Q学习的实现
- C语言程序设计50例(经典收藏)
- BFS题目学习总结
- 继续探讨linux文件权限的问题以及find指令的选项
- stdafx.h 详解
- Java WebService 简单实例
- 队列工厂之RedisMQ
- Android自定义方框EditText注册验证码
- SUSE环境下配置安装SVN版本控制器
- 安卓菜鸟笔记二:Activity的生命周期
- Lua中函数与面向对象编程的基础