UVA10047独轮车
题意:
给你一个独轮车,轮子上有五个扇形,每过一个格子就转过一个扇形,刚开始的时候方向是向北的,绿色上行向下,每一次可以有三种操作,到下一个格子,左转90度,右转90度,每一次操作都花费时间1,问从起点到终点的最小步数,要求到终点的时候必须还是绿色扇形向下,方向无所谓。
思路:
mark[x][y][col][fx]代表的是在点(x,y)处,颜色是col方向是fx是否走过,然后就是个简单的广搜了,还有提示下,这个题目没有必要用优先队列的,每次操作花费都一样,仔细想想队列里面的东西,本来就是按照步数小的在前面存的,具体细节看代码,还有个事就是UVA上貌似没有pe啊!,pe貌似是直接wa的节奏。
#include<queue>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef struct
{
int x ,y ,fx ,col ,t;
}NODE;
NODE xin ,tou;
int mark[26][26][6][5];
int map[26][26];
int ex ,ey ,sx ,sy;
int n ,m;
bool ok(int x, int y ,int c ,int f)
{
return x >= 1 && x <= n && y >= 1 && y <= m && !map[x][y] && !mark[x][y][c][f];
}
int BFS()
{
xin.x = sx ,xin.y = sy ,xin.t = 0 ,xin.fx = 1 ,xin.col = 1;
memset(mark ,0 ,sizeof(mark));
mark[sx][sy][1][1] = 1;
queue<NODE>q;
q.push(xin);
while(!q.empty())
{
tou = q.front();
q.pop();
if(tou.x == ex && tou.y == ey && tou.col == 1)
return tou.t;
//向前
if(tou.fx == 1) xin.x = tou.x - 1 ,xin.y = tou.y;
if(tou.fx == 2) xin.x = tou.x ,xin.y = tou.y + 1;
if(tou.fx == 3) xin.x = tou.x + 1 ,xin.y = tou.y;
if(tou.fx == 4) xin.x = tou.x ,xin.y = tou.y - 1;
xin.fx = tou.fx ,xin.t = tou.t + 1 ,xin.col = (tou.col + 1) % 6;
if(!xin.col) xin.col ++;
if(ok(xin.x ,xin.y ,xin.col ,xin.fx))
{
mark[xin.x][xin.y][xin.col][xin.fx] = 1;
q.push(xin);
}
//向右
xin.x = tou.x ,xin.y = tou.y;
xin.t = tou.t + 1 ,xin.col = tou.col;
xin.fx = tou.fx + 1;
if(xin.fx > 4) xin.fx = 1;
if(ok(xin.x ,xin.y ,xin.col ,xin.fx))
{
mark[xin.x][xin.y][xin.col][xin.fx] = 1;
q.push(xin);
}
//向左
xin.x = tou.x ,xin.y = tou.y;
xin.t = tou.t + 1 ,xin.col = tou.col;
xin.fx = tou.fx - 1;
if(xin.fx == 0) xin.fx = 4;
if(ok(xin.x ,xin.y ,xin.col ,xin.fx))
{
mark[xin.x][xin.y][xin.col][xin.fx] = 1;
q.push(xin);
}
}
return -1;
}
int main ()
{
int i ,j ,Ans ,cas = 1 ,mk = 0;
char str[30];
while(~scanf("%d %d" ,&n ,&m) && n + m)
{
for(i = 1 ;i <= n ;i ++)
{
scanf("%s" ,str);
for(j = 0 ;j < m ;j ++)
{
if(str[j] == '#') map[i][j+1] = 1;
if(str[j] == '.') map[i][j+1] = 0;
if(str[j] == 'S') map[i][j+1] = 0 ,sx = i ,sy = j + 1;
if(str[j] == 'T') map[i][j+1] = 0 ,ex = i ,ey = j + 1;
}
}
Ans = BFS();
if(mk) puts("");
printf("Case #%d\n" ,cas ++);
Ans == -1 ? puts("destination not reachable"):printf("minimum time = %d sec\n" ,Ans);
mk = 1;
}
return 0;
}
UVA10047独轮车的更多相关文章
- UVa10047 The Monocycle
UVa10047 The Monocycle 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19491 (以上摘自htt ...
- SOLOWHEEL - 电动独轮车 - SOLOWHEEL俱乐部聚会活动火热报名中
SOLOWHEEL - 电动独轮车 - SOLOWHEEL俱乐部聚会活动火热报名中 SOLOWHEEL俱乐部聚会活动火热报名中
- uva-10047
我们考虑一个特殊情况,一个独轮车是一个圆环,独轮车靠这个圆环运动,这个圆环上涂有五个不同的颜色,如下图每个颜色段的圆心角是72度,这个圆环在MxN个方格的棋盘上运动,独轮车从棋盘中一个格子的中心点开始 ...
- UVa 10047,独轮车
题目链接:https://uva.onlinejudge.org/external/100/10047.pdf 题目链接:http://vjudge.net/contest/132239#proble ...
- 美版SOLOWHEEL与盗版SOLOWHEEL-IPS独轮车终极PK【图】_厂商资讯_太平洋电脑网
http://g.pconline.com.cn/x/330/3304676.html
- UVA-10047 The Monocycle (图的BFS遍历)
题目大意:一张图,问从起点到终点的最短时间是多少.方向转动也消耗时间. 题目分析:图的广度优先遍历... 代码如下: # include<iostream> # include<cs ...
- C 语言学习 第一次作业总结
第一次的作业是冯老师布置的练习题,需要在pta平台上完成.我这边看不到结果,但是透过冯老师给出的截图,同学们都还是认真的去做的.同时,我这边也布置了一个持续 3 周的作业:熟悉 git 的使用.因为后 ...
- The Monocycle(BFS)
The Monocycle Time Limit: 3000MS64bit IO Format: %lld & %llu [Submit] [Go Back] [Status] Des ...
- UVA 10047 The Monocycle
大白图论第二题··· 题意:独轮车的轮子被均分成五块,每块一个颜色,每走过一个格子恰好转过一个颜色. 在一个迷宫中,只能向前走或者左转90度或右转90度(我曾天真的认为是向左走和向右走···),每个操 ...
随机推荐
- 【产品设计】linux产品设计总结笔记
Linux 预研产品设计 产品的目的: 1.综合集团内部重复性开发的工作,将多种操作系统统一到科东统一负责 2.明确技术在哪些设备上是可行的,再去拓展.一开始不做平台化产品 3.软件规划需要结合硬 ...
- linux 设置DNS解决,不能ping 域名的问题
vi /etc/resolv.conf nameserver 114.114.114.114
- Windows-Redis占用C盘系统空间
发现redis在电脑死机蓝屏的情况下,就是非正常退出redis会导致redis的缓存文件不会回收,占用系统空间, 下次在启动的时候,会再次创建一个10G多的缓存文件,极度占用磁盘空间. 现说明解决办法 ...
- 从代理模式 到 SpringAOP
前言 Spring AOP 就是通过代理模式来实现切面编程的.代理模式用来为其他对象提供一种代理,以控制对这个对象的访问. 代理对象在客户端和目标对象之间起到中介的作用.通过控制对这个对象的访问,可以 ...
- 推荐一个能让谷歌浏览器变暗色的插件(darkreader)
下载 https://codechina.csdn.net/mirrors/darkreader/darkreader?utm_source=csdn_github_accelerator 安装教程 ...
- 医学图像配准 | Voxelmorph 微分同胚 | MICCAI2019
文章转载:微信公众号「机器学习炼丹术」 作者:炼丹兄(已授权) 联系方式:微信cyx645016617(欢迎交流) 论文题目:'Unsupervised Learning for Fast Proba ...
- Flutter学习简记
StatefulWidget和StatelessWidget StatefulWidget : 具有可变状态的窗口部件,也就是你在使用应用的时候就可以随时变化,比如我们常见的进度条,随着进度不断变化. ...
- P1781_宇宙总统(JAVA语言)
//水题 题目背景 宇宙总统竞选 题目描述 地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统. 输入输出格式 输入格 ...
- 3、MyBatis教程之CURD操作
4.CURD操作 1.查询 根据用户 Id查询用户 在UserMapper中添加对应方法 public interface UserMapper { List<User> getUserL ...
- 【MCU】移植AT32库&FreeRTOS教程
目录 前言 1. 移植AT库 1.1 移植内核相关文件 1.2 移植芯片型号相关文件 1.3 移植芯片外设驱动库 1.4 移植配置文件及中断回调函数文件 2. 移植FreeRTOS源码 2.1 获取 ...