bfs加传送机问题
来源:互联网 发布:阿里云主机大学生 编辑:程序博客网 时间:2024/05/21 18:44
hdu2102;
http://acm.hdu.edu.cn/showproblem.php?pid=2102;
题目大意;
1,有两层,里面存在传送机;可以从这层这个位置传送到另外一层的相应位置;
2,在t时间内从左上角(0,0,0)处到达P处;(最优解是否小于t即可);
解题关键;
1;了解bfs的模板及应用;
2;用了三维数组,但一维只有2个正好对应着上下两层,也可以方便实现传送到另外一层相应位置,只需要改变一维下标即可;
3;传送机的处理;
4;队列元素的结构体的构造;(怎样方便简洁);
代码;
#include<stdio.h>#include<string.h>#include<queue>#include<iostream>using namespace std;char mp[2][20][20];//存放地图struct node//结构体包括层数,坐标和时间; { int x,i,j,t;};int dir[4][2] = {{0,-1},{-1,0},{0,1},{1,0}} ;//四个方向int n, m, time;void bfs(){ queue<node> q; node p ,d; int mark[2][20][20]={0};//每个坐标的状态代表是否走过; mark[0][0][0] = 1; p.x = 0; p.i=0;p.j=0;p.t=0;//初始地点; q.push(p); while(!q.empty()) { d = q.front(); q.pop(); for(int ii = 0; ii < 4; ii++) { p.i = d.i + dir[ii][0]; p.j = d.j + dir[ii][1]; p.x = d.x; if(p.i>=0 && p.i<n && p.j>=0 && p.j<m && mark[p.x][p.i][p.j]==0&& mp[p.x][p.i][p.j]!='*') { if(mp[p.x][p.i][p.j] == '#') { mark[p.x][p.i][p.j] = 1; if(p.x==1)p.x=0; else p.x= 1; } mark[p.x][p.i][p.j] = 1; p.t = d.t+1; //printf("%d %d %d\n",p.x,p.i,p.j); if(p.t>time){ printf("NO\n") ; return ; } if(mp[p.x][p.i][p.j]=='P'){ printf("YES\n") ; return ; } q.push(p); } } } printf("NO\n") ;}int main(){ int tt,i,j,k; scanf("%d",&tt); while(tt--) { cin>>n>>m>>time; for(i = 0; i < 2; i++) { for(j = 0; j < n; j++) { for(k = 0; k < m; k++) { cin>>mp[i][j][k]; } } } for(j = 0; j < n; j++)//处理传送机问题;;; { for(k = 0; k < m; k++) { if(mp[0][j][k]=='#'&&mp[1][j][k]=='*') mp[0][j][k] = '*'; if(mp[0][j][k]=='#'&&mp[1][j][k]=='#') mp[0][j][k] = mp[1][j][k] = '*'; if(mp[1][j][k]=='#'&&mp[0][j][k]=='*') mp[1][j][k] = '*'; } } bfs(); } return 0;}
0 0
- bfs加传送机问题
- uva 11624 Fire!(迷宫问题加 着火 两次bfs)
- poj 3984迷宫问题(bfs加打印路径)
- poj1573模拟加bfs
- 关于有传送门的BFS
- protues数据传送问题
- POJ 3984(bfs加路径)
- BFS问题
- JQuery 传送中文乱码问题
- 飞秋传送文件问题
- hrbust 哈理工oj 2188 星际旅行【BFS+传送阵】
- 【u224】传送机
- HDU1242 Rescue(优先队列加BFS)
- 一道BFS加区间题的教训
- Hdu--Rescue之bfs加优先队列
- 迷宫问题 经典bfs问题【bfs】
- 用ssh在虚拟机与宿主机之间传送文件的一些问题
- 关于断点传送的一些问题
- 二叉树遍历算法的应用
- #443 Two Sum II
- 设计模式学习第十一天
- Android帧率测试
- 用RotateDrawable实现网易云音乐唱片机效果
- bfs加传送机问题
- 基于UML的需求分析和系统设计
- jeecg中下拉框增加没有的属性dictSelect
- 数学公式是如何实现的?
- BC#86.1003(HDOJ5806)NanoApe Loves Sequence Ⅱ
- Fragment之静态使用
- C++ 学习笔记:不知道的运算符和未知的知识点
- wait()为什么放在 while中
- Dijit Editor