题目大意:一张图,问从起点到终点的最短时间是多少。方向转动也消耗时间。

题目分析:图的广度优先遍历。。。

代码如下:

# 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遍历)的更多相关文章

  1. 图的bfs遍历模板(邻接矩阵存储和邻接表存储)

    bfs遍历图模板伪代码: bfs(u){ //遍历u所在的连通块 queue q; //将u入队 inq[u] = true; while (q非空){ //取出q的队首元素u进行访问 for (从u ...

  2. UVA 10047 - The Monocycle BFS

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

  3. UVA 10047 The Monocycle

    大白图论第二题··· 题意:独轮车的轮子被均分成五块,每块一个颜色,每走过一个格子恰好转过一个颜色. 在一个迷宫中,只能向前走或者左转90度或右转90度(我曾天真的认为是向左走和向右走···),每个操 ...

  4. 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 ...

  5. uva 10047 The Monocycle(搜索)

    好复杂的样子..其实就是纸老虎,多了方向.颜色两个状态罢了,依旧是bfs. 更新的时候注意处理好就行了,vis[][][][]要勇敢地开. 不过这个代码交了十几遍的submission error,手 ...

  6. UVA 11624 UVA 10047 两道用 BFS进行最短路搜索的题

    很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M): UVA 11624 写的比较挫 #include <iostream> #include ...

  7. 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题

    这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...

  8. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  9. 图的深度优先遍历(DFS)和广度优先遍历(BFS)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

随机推荐

  1. SCADA 必备函数之 :关于消息的函数

    Message Functions BroadcastSystemMessage//是将一条系统消息广播给系统中所有的顶级窗口. BroadcastSystemMessageEx//将消息发送到指定的 ...

  2. Delphi程序调用C#.Net编译的DLL并打开窗体(详解)

    Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...

  3. smart基础原理

    1html模板页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  4. 整理一些《纸书科学计算器》的小Tips

    本文最开始是在2016年的文章 Win10应用<纸书科学计算器>更新啦! 发表之后撰写的,当时那篇文章收到了不少人点赞,应用在国内市场的日下载量也突然上涨,让我感到受宠若惊,这里要感谢Wp ...

  5. oracle修改某字段不是必输性

    执行sql: ALTER TABLE table_name MODIFY 要修改的字段名字 NULL;

  6. linux 虚拟机设置好固定ip 修改了 dns 网络需要设置成桥接模式

    linux  虚拟机设置好固定ip 修改了 dns  网络需要设置成桥接模式  可以修复网络连接(浏览器返回 server not  found)

  7. JS正则表达式从入门到入土(1)—— REGEXP对象

    REGEXP对象 JavaScript通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象. 1.字面量 2.构造函数 字面量 字面量是直接通过/.../创建RegExp对象实例. ...

  8. [Deep Learning]学习资料积累

    1. ufldl教程√ Andrew Ng的教程,matlab代码. 2. Neural Network and Deep Learning√: 一本未写完的书,非常细致,对基础的概念比如cross ...

  9. wamp5.5.12安装re dis扩展

    转载地址:http://hanqunfeng.iteye.com/blog/1984387 phpredis是个人觉得最好的一个php-redis客户端,因为其提供的function与redis的命令 ...

  10. ElasticSearch(一)ElasticSearch的应用场景及为什么要选择ElasticSearch?

    先了解一下数据的分类 结构化数据又可以称之为行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据.其实就是可以能够用数据或者统一的结构加以表示的数据.比如在数据表存储商品的库存,可以用整型表示 ...