题干:

Uva的题目就不粘贴题干了,,直接上题意吧。

有你一个独轮车,车轮有5种颜色,为了5中颜色的相对位置是确定的。有两种操作:1.滚动:轮子必须沿着顺时针方向滚动,每滚动一次会到达另一个格子,着地的颜色会改变(顺时针转)。例如当前是绿色着地下一次就是黑色,依次是红蓝白。2.转动:就是改变了轮子的方向(不改变颜色),转动每次只能选择左转90度或者右转90度,即不能掉头。车子每向前走一格(滚动)耗时1秒,拐弯(转动)耗时1秒。

开始时方向朝北,轮子接触地面的颜色为绿色,求出一条耗时最短的路线,到达终点时,使得车子接触地面的也为绿色,方向无所谓。

解题报告:

题意解释清楚了就是个简单的bfs了,,,只是需要记录的东西比较多,,之前最多就是考虑个方向,比如这题【HDU - 1254 】推箱子 (双bfs),现在再加个颜色的记录就是了。。vis[x][y][方向][颜色]。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;struct Node {int x,y;int dir,col,time;Node(){}Node(int x,int y,int dir,int col,int time):x(x),y(y),dir(dir),col(col),time(time){}
} st,ed;
int n,m;
char maze[55][55];
int nx[4]= {0,-1,0,1};//左,上,右,下
int ny[4]= {-1,0,1,0};
bool vis[55][55][5][5];
bool ok (int x,int y) {if(x >= 1 && x <= n && y >= 1 && y <=m) return 1;return 0 ;
}
int bfs() {memset(vis,0,sizeof vis);vis[st.x][st.y][1][0] = 1;queue<Node> q;q.push(st);int tx,ty,tc,td;while(!q.empty()) {Node cur = q.front();q.pop();if(cur.x == ed.x && cur.y == ed.y && cur.col == 0) return cur.time;tc = (cur.col + 1) % 5;tx = cur.x + nx[cur.dir];ty = cur.y + ny[cur.dir];if(ok(tx,ty) && maze[tx][ty] != '#' && vis[tx][ty][cur.dir][tc] == 0) {vis[tx][ty][cur.dir][tc] = 1;q.push(Node(tx,ty,cur.dir,tc,cur.time+1));}td = (cur.dir + 1) % 4;if(vis[cur.x][cur.y][td][cur.col] == 0) {vis[cur.x][cur.y][td][cur.col] = 1;q.push(Node(cur.x,cur.y,td,cur.col,cur.time+1));} td = (cur.dir - 1 + 4) % 4;if(vis[cur.x][cur.y][td][cur.col] == 0) {vis[cur.x][cur.y][td][cur.col] = 1;q.push(Node(cur.x,cur.y,td,cur.col,cur.time+1));}}return -1;
}
int main()
{int iCase = 0;while(~scanf("%d %d",&n,&m)) {if(n == 0 && m == 0) break;for(int i = 1; i<=n; i++) {scanf("%s",maze[i]+1);}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {if(maze[i][j] == 'S') st = Node(i,j,1,0,0);if(maze[i][j] == 'T') ed = Node(i,j,0,0,0);}}if(iCase) puts("");printf("Case #%d\n",++iCase);int ans = bfs();if(ans == -1) puts("destination not reachable");else printf("minimum time = %d sec\n",ans);}return 0 ;}

总结:

代码的书写告诉我们这题只需要一个queue就可以了,,如果不这么写的话可能需要一个pq才可以、、比如你把转向和前进算在算在一步当中然后time+2,那就需要pq了、、

【Uva - 10047 】The Monocycle(搜索,bfs记录状态)相关推荐

  1. UVA 10047 - The Monocycle BFS

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. *【CodeForces - 122C 】Lucky Sum (bfs记录状态,二分查找,有坑)(或分块)

    题干: Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decima ...

  3. uva 10047 the monocyle (四维bfs)

    算法指南白书 维护一个四维数组,走一步更新一步 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 ...

  4. 2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)

    1 /* 2 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 3 以前做过的都是用二维的!自己的四维还是太狭隘了..... 4 5 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找 ...

  5. 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)

    前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...

  6. 搜索问题之状态空间搜索(状态压缩+记忆化搜索+ BFS)

    文章目录 1. 前言 2. 问题举例(九宫格问题) 3. 问题分析 3.1 状态编码与解码 3.2 哈希映射 3.3 集合判重 4. 问题实现 推荐阅读 1. 前言 之前介绍的回溯法常用于 解空间的搜 ...

  7. 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  8. 广度优先搜索(BFS)

    广度优先 Description: 阿狸被困在迷宫,snoopy要去救他,snoopy可以向上.下.左.右四个方向行走,每走一步(格)就要喝掉一瓶益力多.现在给它一个迷宫地图请问:snoopy最少需要 ...

  9. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

最新文章

  1. 独家 | Kaggle 大神Dan Becker与你分享他的数据科学之旅!
  2. man、info、help
  3. zen3架构_全新Zen3架构,AMD发布最新Ryzen5000系列处理器
  4. 【数据结构与算法】之深入解析“寻找峰值”的求解思路与算法示例
  5. 每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周
  6. Python-10-条件和条件语句
  7. 《深入react技术栈》学习笔记(一)初入React世界
  8. 外卖员不满上楼送餐要求向外卖吐口水4次,顾客不知情吃下整份外卖...
  9. C#问题——interface class
  10. 计算机操作系统|汤小丹|第四版|习题答案(三)
  11. 神经网络可以用来预测吗,神经网络预测的优点
  12. 折腾黑苹果——重装10.10.3 传统BIOS+MBR+变色龙 引导方案
  13. 三星内存编码_看编号 识内存
  14. 哪里获取计算机新闻比较好,学新闻的用什么电脑比较好
  15. iconfont在IE下不兼容问题
  16. 组件、插件、控件的区别
  17. node.js使用手册_权威的Node.js手册
  18. 游戏中的人工智能AI设计
  19. TypeError [ERR_INVALID_ARG_TYPE]: The “path“ argument must be of type string(已解决)
  20. HTML保存变暗了怎么办,浮漂用久了漂尾变暗怎么办?试试这样做,没准还有救...

热门文章

  1. [Leetcode][第63题][JAVA][不同路径2][动态规划][压缩路径]
  2. excel亮灯怎么设置_Excel表格技巧—怎么给表格设置密码
  3. python入口函数的作用_python之函数中参数的作用域
  4. java file 堵塞_单元测试最终在Java 6中阻塞
  5. document.addeventlistener方法不执行_JUnit 5 测试方法的执行优先级
  6. threejs中坐标系转换和实现物体跟随鼠标移动
  7. 允许使用抽象类类型 isearchboxinfo 的对象_此对象非彼对象(面向对象)3
  8. python中配置opencv_在Windows中安装OpenCV-Python|四
  9. 三个用户在同一系统中同时对他们的c语言,杭州电子科技大学学生考试卷2013年操作系统试卷(2份,有答案)...
  10. cookie 百科_cookie是什么