独轮车

news/2024/11/25 7:55:23/

描述:

独轮车的轮子上有红、黄、蓝、白、绿(依顺时针序)5种颜色,在一个如下图所示的20*20的迷宫内每走一个格子,轮子上的颜色变化一次。独轮车只能向前推或在原地转向。每走一格或原地转向90度均消耗一个单位时间。现给定一个起点(S)和一个终点(T),求独轮车以轮子上的指定颜色到达终点所需的最短时间。

输入:

本题包含一个测例。测例中分别用一个大写字母表示方向和轮子的颜色,其对应关系为:E-东、S-南、W-西、N-北;R-红、Y-黄、B-蓝、W-白、G-绿。在测试数据的第一行有以空格分隔的两个整数和两个大写字母,分别表示起点的坐标S(x,y)、轮子的颜色和开始的方向,第二行有以空格分隔的两个整数和一个大写字母,表示终点的坐标T(x,y)和到达终点时轮子的颜色,从第三行开始的20行每行内包含20个字符,表示迷宫的状态。其中'X'表示建筑物,'.'表示路.

输出:

在单独的一行内输出一个整数,即满足题目要求的最短时间。

输入样例:

3 4 R N 15 17 Y XXXXXXXXXXXXXXXXXXXX X.X...XXXXXX......XX X.X.X.....X..XXXX..X X.XXXXXXX.XXXXXXXX.X X.X.XX....X........X X...XXXXX.X.XX.X.XXX X.X.XX....X.X..X.X.X X.X.X..XX...XXXX.XXX X.X.XX.XX.X....X.X.X X.X....XX.X.XX.X.X.X X.X.X.XXXXX.XX.X.XXX X.X.X.XXXXX....X...X X.X.......X.XX...X.X X.XXX.XXX.X.XXXXXXXX X.....XX.......X...X XXXXX....X.XXXXXXX.X X..XXXXXXX.XXX.XXX.X X.XX...........X...X X..X.XXXX.XXXX...XXX XXXXXXXXXXXXXXXXXXXX

输出样例:

56



#include <iostream>
#include <queue>
using namespace std;
int sx, sy, sd, sc;
int fx, fy, fc;
char maze[21][21];
int visited[21][21][5][4];
int dir[4][2]= {{-1,0}, {0,1}, {1,0}, {0,-1}};
typedef struct Node
{int x;int y;int color;int direction;int time;Node(int x=0, int y=0, int color=0, int direction=0, int time=0):x(x), y(y), color(color), direction(direction), time(time){};
}status;int direct(char ch)
{switch(ch){case 'N':return 0;case 'E':return 1;case 'S':return 2;case 'W':return 3;}
}int color(char ch)
{switch(ch){case 'R':return 0;case 'Y':return 1;case 'B':return 2;case 'W':return 3;case 'G':return 4;}
}//直走
status toStraight(status u)
{status v = u;v.x = v.x+dir[u.direction][0];v.y = v.y+dir[u.direction][1];v.color = (v.color+1)%5;v.time ++;return v;
}//右转
status toRight(status u)
{status v = u;v.direction = (v.direction+1)%4;v.time ++;return v;
}//左转
status toLelf(status u)
{status v = u;v.direction = (v.direction+3)%4;v.time ++;return v;
}bool isAim(status u)
{if(u.x == fx && u.y == fy && u.color == fc)return true;elsereturn false;
}bool isLegal(status u)
{if(u.x > 0 && u.x < 21 && u.y > 0 && u.y < 21 && (!visited[u.x][u.y][u.color][u.direction]) && maze[u.x][u.y] == '.')return true;elsereturn false;
}
int bfs()
{queue<Node> q;status s = Node(sx, sy, sc, sd, 0);q.push(s);visited[sx][sy][sc][sd] = 1;while(!q.empty()){s = q.front();q.pop();status v = toStraight(s);if(isLegal(v)){if(isAim(v))return v.time;visited[v.x][v.y][v.color][v.direction] = 1;q.push(v);}v = toLelf(s);if(!visited[v.x][v.y][v.color][v.direction]){visited[v.x][v.y][v.color][v.direction] = 1;q.push(v);}v = toRight(s);if(!visited[v.x][v.y][v.color][v.direction]){visited[v.x][v.y][v.color][v.direction] = 1;q.push(v);}}return -1;
}
int main()
{char c, d;cin >> sx >> sy >> c >> d;sc = color(c), sd = direct(d);cin >> fx >> fy >> c;fc = color(c);for(int i = 1; i <= 20; i++){for(int j = 1; j <= 20; j++){cin >> maze[i][j];}}cout << bfs() << endl;return 0;
}




http://www.ppmy.cn/news/492893.html

相关文章

Do research

About research 记得师姐曾经说过这么一句话:当她需要什么的时候,nigus就教她什么. 我今天所理解的就是:当你研究某个问题的时候,你自然随着对它的深入会有好的解决的办法. 一.什么是研究呢? 1.在某一个具体研究活动中,你获得的不仅仅是学习能力和科研能力,而是在这个活动之中…

城市道路自动驾驶车辆运动规划和控制技术综述(2)

本文为翻译《A survey of motion planning and control techniques for self-driving Urban vehicles》部分内容. IV.运动规划 运动规划层负责计算从车辆的当前构型到决策层级的行为层提供的目标构型的安全&#xff0c;舒适且动态可行的轨迹。根据环境&#xff0c;目标构型可能…

什么才是真正的架构设计?

往期热门文章&#xff1a; 1、《往期精选优秀博文都在这里了&#xff01;》2、Serializable&#xff1a;明明就一个空接口&#xff01;为什么还要实现它&#xff1f;3、1.3万亿条数据查询如何做到毫秒级响应&#xff1f;4、技术大佬&#xff1a;我去&#xff0c;你写的 switch …

声卡基本知识

为了认识声音卡&#xff0c;我们首先应该了解一些有关声音的知识。例如&#xff0c;什么是声音、计算机怎样度量声音、计算机是怎样存储声音、怎样播放声音等问题。按照多媒体计算机MPC的规定&#xff0c;声音卡应该支持两种声音&#xff1a;波形声音和MIDI声音(合成声音)。MID…

杰理ac18芯片_杰理AC1074 MP3解码芯片ic方案说明

系列分类 对应的芯片 目前版本 封装 备注 2系列 已经停产&#xff0c;无需关心 1系列 AC1090 E 版 LQFP48 多 GPIO 口 AC1094 E 版 SSOP24 AC1093 E 版 SSOP24 AC1082 E 版 SOP16 AC1074 E 版 QSSOP24 替代 AC1094 1系列的特点单价低&#xff0c;2013年推出的&#xff0c;生命周…

腾达AC7拆解,有一根天线是假的笑死我了

这个是断了一根天线的 拆开的全貌 散热比AC10好像小些&#xff0c;太小气&#xff0c;哈哈&#xff0c;白线的是2.4G天线&#xff0c;黑线的是5G天线&#xff0c;2.4G是三根天线。但其实有一根天线有可能假的&#xff0c;哈哈。.1 3 5是2.4G天线&#xff0c;其实中间的3天线极…

ac9260网卡linux,AC9260无线网卡 速度高达1.73Gbps

【IT168 资讯】随着百兆光纤入户&#xff0c;很多家庭都升级了802.11ac Wave 2.0标准的无线路由器&#xff0c;但笔记本网卡并不支持802.11ac Wave 2.0标准&#xff0c;无法体验千兆Wi-Fi的速度&#xff0c;如果你想让笔记本带宽尽可能达到最大的提升&#xff0c;那你就要选择一…

AC防火墙

防火墙基本功能介绍 防火墙规则是控制设备各个网口转发数据的开关。 这里设置的规则可基于IP和端口进行数据包的转发控制&#xff0c;和传统四层防火墙相似。 NAT代理上网 NAT代理上网功能及SNAT用来设置对数据包源IP地址进行转换的规则。 一般在公网出口的设备做SNAT&#xff…