题目链接: Vladik and Favorite Game
题目大意
一幅n*m地图, .
代表可以走的位置, *
代表不可以走的位置, F
代表终点, 一开始人在(1, 1)位置, 有四个按钮U D L R
, 代表上下左右移动, 输出方向后, 人会移动, 然后交互器会给出移动后的位置
其中U
和D
的功能可能会被交换, L
和R
的功能也可能会被交换(从一开始就被交换了或没有被交换, 之后整个游戏都不变), 如果在边界向边界方向移动, 移动后的位置不变, 如果你移动后的位置是*
游戏失败
要在n*m的步数内走到终点
思路
首先要判断出那些按钮功能被交换了, 同时还有保证不会走到有*
的位置
一开始的位置是(1, 1), 如果右边的位置不是*
, 那就往右走试一下(R
), 如果位置不变, 就说明L
和R
功能交换了, 同理判断出另一对按钮的情况
然后BFS记录路径, 输出到终点的答案
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110, inf = 0x3f3f3f3f;
char mp[MAXN][MAXN];
int n, m, x, y, last[MAXN][MAXN];
char button[4] = {
'U', 'D', 'L', 'R', };
void Move(int i)
{
printf("%c\n", button[i]);
cout.flush();