HDU 1253 胜利大逃亡 【BFS】
2016-02-03 21:36
302 查看
之前一直排错出不来,忘了在check函数里面判断该点是否已经走过了;
很套路的BFS,直接套模板就好了;
特别的这里需要两个结构体,将p存进q计算后,把q弹出来;
套路就是这样了,
很套路的BFS,直接套模板就好了;
特别的这里需要两个结构体,将p存进q计算后,把q弹出来;
#include <stdio.h> #include <string.h> #include <queue> #include <iostream> using namespace std ; const int N = 60; int map ; int vis ; int nx[] = {1,-1,0,0,0,0}; int ny[] = {0,0,1,-1,0,0}; int nz[] = {0,0,0,0,1,-1}; int a , b , c ,ans,t; struct node{ int x ; int y ; int z ; int step; }; int abs(int x) { if(x<0) return -x; else return x; } bool check(int i , int j , int k) { if(i<0||j<0||k<0||i>=a||j>=b||k>=c||map[i][j][k]==1) { return false; } return true; } int bfs(int x , int y , int z) { int i ; queue<node>Q; node p ,q; p.x=x; p.y=y; p.z=z; p.step=0; vis[x][y][z]=1; Q.push(p); while(!Q.empty()) { p=Q.front(); Q.pop(); if(p.x==a-1&&p.y==b-1&&p.z==c-1&&p.step<=t) { return p.step; } for(i=0;i<6;i++) { q=p; q.x+=nx[i]; q.y+=ny[i]; q.z+=nz[i]; if(!vis[q.x][q.y][q.z]&&check(q.x,q.y,q.z)) { q.step++; vis[q.x][q.y][q.z]=1; Q.push(q); } } } return -1; } int main() { int ncase; cin>>ncase; while(ncase--) { memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); int i , j , k ; cin>>a>>b>>c>>t; for(i=0;i<a;i++) for(j=0;j<b;j++) for(k=0;k<c;k++) { scanf("%d",&map[i][j][k]); } ans=bfs(0,0,0); cout<<ans<<endl; } return 0 ; }
套路就是这样了,
相关文章推荐
- 监听器
- 4269: 再见Xor 高斯消元求线性基
- springmvc+hibernate
- 怎样学习才能拥有所谓“高并发”的经验?
- iOS命名规范
- 京东,想说爱你,并不容易!
- leetcode104题 题解 翻译 C语言版 Python版
- CentOS快速搭建subversion服务器
- 分享20个华丽的模态窗口弹出效果示例(梦想天空)
- 116. Populating Next Right Pointers in Each Node && 117. II
- spring ApplicationContextAware的那些事儿
- hook模板x86/x64通用版(4)--CHook.cpp说明
- Nginx与ZeroMQ的结合
- 单例模式
- Automatic logon configuration on Linux OS
- 深度学习 Deep Learning UFLDL 最新 Tutorial 学习笔记 1:Linear Regression
- maven项目中搭建spring框架
- struts2 ResultType为chain的使用
- c++多线程编程:实现标准库accumulate函数的并行计算版本
- HDU 3849 By Recognizing…(求无向图的桥数目)