题意:
      给你一个独轮车,轮子上有五个扇形,每过一个格子就转过一个扇形,刚开始的时候方向是向北的,绿色上行向下,每一次可以有三种操作,到下一个格子,左转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. 微服务网关Zuul过滤器Filter

    Zuul本质 Zuul是一个网关,关于网关的介绍参考:亿级流量架构之网关设计思路.常见网关对比, 可知Zuul是一个业务网关, 而深入了解Zuul, 基本就是一系列过滤器的集合: Zuul的过滤器 下 ...

  2. 单链表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> /** * 含头节点单链表定义及基本操作 */ //基本操作函数用到的状态码 #define TR ...

  3. kubernetes生产实践之mongodb

    简介 先看下生命周期图 kubedb支持的mongodb版本 [root@qd01-stop-k8s-master001 mysql]# kubectl get mongodbversions NAM ...

  4. Java中的四种权限修饰符及六种非访问修饰符(简识)

    一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...

  5. 20个最有用的Python数据科学库

    核心库与统计 1. NumPy(提交:17911,贡献者:641) 一般我们会将科学领域的库作为清单打头,NumPy 是该领域的主要软件库之一.它旨在处理大型的多维数组和矩阵,并提供了很多高级的数学函 ...

  6. EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录

    前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...

  7. (原创)IconFont(矢量图标字体)在Winform中的应用

    一.前言 很多时候,使用矢量图形可以带来非常美观的界面效果,比如SVG的使用.但是Winform原生是不支持显示SVG图像的,所以退而求其次,可以使用IconFont来实现相似的矢量效果. 先来个图解 ...

  8. Dynamics CRM产生公共签名,避免每次插件换环境重新输入签名密钥账号密码

    在Dynamcs CRM项目维护交接过程中,我们经常会使用其他合作者的插件代码.但是每次拿到别人代码编译的时候插件密钥都要重新输入密钥的账号密码.而且如果密钥都是的话比较麻烦.所以这里就针对这个问题做 ...

  9. 【Java】8.0 数组及其操作

    [概述] 有时候,我们需要某类的变量,它们是用于表达同一类的东西,但每个个体有不一样,比如学生成绩表的各个成绩 我们不可能为每个学生单独建立一个int变量来表示成绩,此时我们可以创建一个数组,再把每个 ...

  10. 【C/C++】memset方法的误区

    目录 一.前言 二.函数作用 三.效率对比 四.误区总结 1.按字节设置 2.设置的值只有最低字节有效 3.堆内存不可直接 sizeof 取首地址 4.传参数组不可直接 sizeof 取首地址 一.前 ...