UVA-10047 The Monocycle (图的BFS遍历)
题目大意:一张图,问从起点到终点的最短时间是多少。方向转动也消耗时间。
题目分析:图的广度优先遍历。。。
代码如下:
# include<iostream>
# include<cstdio>
# include<queue>
# include<cstring>
# include<algorithm>
using namespace std; struct Node
{
int x,y,f,l,t;
Node(int _x,int _y,int _f,int _l,int _t):x(_x),y(_y),f(_f),l(_l),t(_t){}
bool operator < (const Node &a) const {
return t>a.t;
}
};
int d[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int vis[30][30][4][5],n,m;
char p[30][30]; void bfs(int sx,int sy)
{
priority_queue<Node>q;
memset(vis,0,sizeof(vis));
vis[sx][sy][0][0]=1;
q.push(Node(sx,sy,0,0,0));
while(!q.empty())
{
Node u=q.top();
q.pop();
if(p[u.x][u.y]=='T'&&u.l==0){
printf("minimum time = %d sec\n",u.t);
return ;
}
if(!vis[u.x][u.y][(u.f+3)%4][u.l]){
vis[u.x][u.y][(u.f+3)%4][u.l]=1;
q.push(Node(u.x,u.y,(u.f+3)%4,u.l,u.t+1));
}
if(!vis[u.x][u.y][(u.f+1)%4][u.l]){
vis[u.x][u.y][(u.f+1)%4][u.l]=1;
q.push(Node(u.x,u.y,(u.f+1)%4,u.l,u.t+1));
}
int nx=u.x+d[u.f][0],ny=u.y+d[u.f][1];
if(nx<0||nx>=n||ny<0||ny>=m||p[nx][ny]=='#') continue;
if(!vis[nx][ny][u.f][(u.l+1)%5]){
vis[nx][ny][u.f][(u.l+1)%5]=1;
q.push(Node(nx,ny,u.f,(u.l+1)%5,u.t+1));
}
}
printf("destination not reachable\n");
} int main()
{
int sx,sy,cas=0,flag=0;
while(scanf("%d%d",&n,&m)&&(n+m))
{
if(flag) printf("\n");
flag=1;
for(int i=0;i<n;++i){
scanf("%s",p[i]);
for(int j=0;j<m;++j)
if(p[i][j]=='S')
sx=i,sy=j;
}
printf("Case #%d\n",++cas);
bfs(sx,sy);
}
return 0;
}
UVA-10047 The Monocycle (图的BFS遍历)的更多相关文章
- 图的bfs遍历模板(邻接矩阵存储和邻接表存储)
bfs遍历图模板伪代码: bfs(u){ //遍历u所在的连通块 queue q; //将u入队 inq[u] = true; while (q非空){ //取出q的队首元素u进行访问 for (从u ...
- UVA 10047 - The Monocycle BFS
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVA 10047 The Monocycle
大白图论第二题··· 题意:独轮车的轮子被均分成五块,每块一个颜色,每走过一个格子恰好转过一个颜色. 在一个迷宫中,只能向前走或者左转90度或右转90度(我曾天真的认为是向左走和向右走···),每个操 ...
- UVA 10047 The Monocycle (状态记录广搜)
Problem A: The Monocycle A monocycle is a cycle that runs on one wheel and the one we will be consi ...
- uva 10047 The Monocycle(搜索)
好复杂的样子..其实就是纸老虎,多了方向.颜色两个状态罢了,依旧是bfs. 更新的时候注意处理好就行了,vis[][][][]要勇敢地开. 不过这个代码交了十几遍的submission error,手 ...
- UVA 11624 UVA 10047 两道用 BFS进行最短路搜索的题
很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M): UVA 11624 写的比较挫 #include <iostream> #include ...
- 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题
这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
随机推荐
- Delphi APP 開發入門(二)Android/iOS設定,Hello World
Delphi APP 開發入門(二)Android/iOS設定,Hello World 分享: Share on facebookShare on twitterShare on google_plu ...
- XE6移动开发环境搭建之IOS篇(2):安装虚拟机(有图有真相)
XE6移动开发环境搭建之IOS篇(2):安装虚拟机(有图有真相) 2014-08-15 22:04 网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的内容.傻瓜式的表 ...
- XDU 1037 倍流畅序列(字符串匹配+贪心)
题目描述 对于一个0,1串s, 从左端开始读取它的0获得序列s0,从右端开始读取它的1获得s1,如果s0与s1同构,则称s为倍流畅序列.例如:011001是一个倍流畅序列, 因为:s0 = 0__00 ...
- cocos2dx 3.x 触摸事件
单点触摸: bool onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent); void onTouchMoved(cocos2d:: ...
- 有界、无界队列对ThreadPoolExcutor执行的影响
本文转载自https://blog.csdn.net/kusedexingfu/article/details/72491864 Java提供了4钟线程池: newCachedThreadPool n ...
- Ubuntu16.04系统中Nmon的安装
Nmon的安装,亲民的安装方法: apt install nmon 不再需要源码编译安装和下载文件到指定目录,解压再运行了.
- 使用.NET Core和Vue搭建WebSocket聊天室
博客地址是:https://qinyuanpei.github.io. WebSocket是HTML5标准中的一部分,从Socket这个字眼我们就可以知道,这是一种网络通信协议.WebSocket是 ...
- IP查找所属网段
最近同学接到阿里面试题 package io.guangsoft.analysis; /* 数据文件: 1.1.1.0/24,123 1.1.2.0/28,345 1.2.0.0/16,789 */ ...
- C++中string的成员函数
string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...
- Java:延迟功能的Robot在Lunix系统上会报错
Java:延迟功能的Robot在Lunix系统上会报错 关于延迟功能的Robot: 今天开发过程中发现,本机开发好的项目,部署到Lunix服务器竟然报错!查了代码发现: Robot r = new R ...