题意:
      给你一个独轮车,轮子上有五个扇形,每过一个格子就转过一个扇形,刚开始的时候方向是向北的,绿色上行向下,每一次可以有三种操作,到下一个格子,左转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独轮车的更多相关文章

  1. UVa10047 The Monocycle

    UVa10047 The Monocycle 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19491 (以上摘自htt ...

  2. SOLOWHEEL - 电动独轮车 - SOLOWHEEL俱乐部聚会活动火热报名中

    SOLOWHEEL - 电动独轮车 - SOLOWHEEL俱乐部聚会活动火热报名中 SOLOWHEEL俱乐部聚会活动火热报名中

  3. uva-10047

    我们考虑一个特殊情况,一个独轮车是一个圆环,独轮车靠这个圆环运动,这个圆环上涂有五个不同的颜色,如下图每个颜色段的圆心角是72度,这个圆环在MxN个方格的棋盘上运动,独轮车从棋盘中一个格子的中心点开始 ...

  4. UVa 10047,独轮车

    题目链接:https://uva.onlinejudge.org/external/100/10047.pdf 题目链接:http://vjudge.net/contest/132239#proble ...

  5. 美版SOLOWHEEL与盗版SOLOWHEEL-IPS独轮车终极PK【图】_厂商资讯_太平洋电脑网

    http://g.pconline.com.cn/x/330/3304676.html

  6. UVA-10047 The Monocycle (图的BFS遍历)

    题目大意:一张图,问从起点到终点的最短时间是多少.方向转动也消耗时间. 题目分析:图的广度优先遍历... 代码如下: # include<iostream> # include<cs ...

  7. C 语言学习 第一次作业总结

    第一次的作业是冯老师布置的练习题,需要在pta平台上完成.我这边看不到结果,但是透过冯老师给出的截图,同学们都还是认真的去做的.同时,我这边也布置了一个持续 3 周的作业:熟悉 git 的使用.因为后 ...

  8. The Monocycle(BFS)

    The Monocycle Time Limit: 3000MS64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Des ...

  9. UVA 10047 The Monocycle

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

随机推荐

  1. 剑指 Offer 56 - I. 数组中数字出现的次数 + 分组异或

    剑指 Offer 56 - I. 数组中数字出现的次数 Offer_56_1 题目描述 解题思路 java代码 /** * 方法一:数位方法 */ class Offer_56_1_2 { publi ...

  2. Microsoft Teams 最新功能发布:协作篇

    正在进行的2021年的Microsoft Ignite大会,发布了一系列跟Microsoft Teams相关的新功能,英文介绍请参考 https://techcommunity.microsoft.c ...

  3. 一. MySQL基础语法

    1. 案例库表 2. DQL语言(数据查询) 2.1 基础查询 -- 进入指定的库 USE myemployees; DESC employees; -- 使用SELECT查询字段 # 1.查询表中的 ...

  4. 助力面试之ConcurrentHashMap面试灵魂拷问,你能扛多久

    目录 前言 ConcurrentHashMap 原理 JDK1.8 版本 ConcurrentHashMap 做了什么改进 为什么 key 和 value 不允许为 null ConcurrentHa ...

  5. CSS篇-dispaly、position、定位机制、布局、盒子模型、BFC

    display常用值 参考链接英文参考链接中文 // 常用值 none:元素不显示 inline:将元素变为内联元素,默认 block:将元素变为块级元素 inline-block:将元素变为内联块级 ...

  6. Python深入:setuptools进阶

    作者:gqtcgq 来源:CSDN 原文:https://blog.csdn.net/gqtcgq/article/details/49519685 Setuptools是Python Distuti ...

  7. Hdu 4821 (字符串hash+map)

    题目链接https://vjudge.net/problem/HDU-4821 题意:给定字符串S ,询问用几个子串满足 : 1.长度为n*len  . 2. n个子串都不相同. 题解:倒序hash将 ...

  8. python-3-1

    一.布尔类型    布尔值为: True 和Flase 注:区分大小写,如果写true 和false   不代表布尔类型值 小于 大于 小于等于  大于等于  对应这些判断 一般就是用布尔类型进行判断 ...

  9. JAVA使用SizeOf

    研究一下JAVA的SizeOf 引用外部类实现JAVA的SizeOf JAVA本身是没有SizeOf的,因此我们需要去MavenRepository中下载JAR包(也可以使用maven等),因为这里只 ...

  10. C/C++ 中的算术及其陷阱

    目录 概述 C/C++ 整数的阴暗角落 整型字面量 整型提升与寻常算术转换 算术溢出检测 位运算技巧 总结 参考 概述 无符号数和有符号数是通用的计算机概念,具体到编程语言上则各有各的不同,程序员是解 ...