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

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

代码如下:

# 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. IISExpress 站点信息

    目录:C:\Users\huxl16\Documents\IISExpress\config applicationhost:applicationhost.config

  2. PKU 2823 Sliding Window(线段树||RMQ||单调队列)

    题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值. 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r, ...

  3. SPOJ - COT Count on a tree

    地址:http://www.spoj.com/problems/COT/en/ 题目: COT - Count on a tree #tree You are given a tree with N  ...

  4. testng失败截图,注解方式调用。

    今天一整天都在研究testng失败截图的方法,参考网上的前辈们的资料,加上自己的理解,终于搞出来了. package com.dengnapianhuahai; /** * 自定义注释 * */ im ...

  5. mysql外键约束无法删除数据的情况解决办法

    先删除子表的数据,然后再删除主表的数据.

  6. php中获得数组长度的方法

    php中获得数组长度的方法   count统计数组里元素的个数:  strlen是统计数组中元素的长度: 你如果想统计数组中所有元素的长度,那就用循环统计吧tqeb 代码: $a  =  array( ...

  7. 运行bat时隐藏cmd窗口

    运行bat时隐藏cmd窗口 新建一个shrjj.vbs文件,文件内容为: Set ws = CreateObject("Wscript.Shell") ws.run "c ...

  8. 再也不学AJAX了!(三)跨域获取资源 ① - 同源策略

    我们之前提到过,AJAX技术使开发者能够专注于互联网中数据的传输,而不再拘泥于数据传输的载体.通过AJAX技术,我们获取数据的方式变得更加灵活,可控和优雅. 但是AJAX技术并不是一把万能钥匙,互联网 ...

  9. HTML代码转义(JAVA)

    String org.apache.commons.lang.StringEscapeUtils.escapeHtml(String str)     测试 System.out.println(St ...

  10. Tomcat access log配置(二)

    前次讨论了spring boot 中添加Tomcat access log 是轻松愉快,配置文件中添加server.tomcat.accesslog即可,那么如果是外置的Tomcat容器又该如何配置呢 ...