难度:5
不得不说刘汝佳的紫书难度曲线太不好了,不到一页讲完bfs,然后就撂给你这么一道例题,然后还说本题非常重要,继续学习之前请先搞懂所有细节。。。
建议对bfs不熟练的人先去洛谷上找几道难度为3为4的题先做做,然后洛谷题单里也有一道带方向的难度为3的模拟题,做完这些之后,应该就能不看书自己把这道题啃下来了,然后就是琢磨一下细节问题,对此类问题的理解再加深一下,
又做了一遍,因为题目给的是起点和起点的朝向,然后数据给的是如果以某个方向进入某个点,那么会往哪个方向转,所以状态是坐标以及进入这个点的方向,输入数据之后先求出第一个点,试了试,第一个点不会超出坐标的范围,不需要特判,然后就是主要的bfs函数的写法了,有点麻烦但还是可以写的,然后不要忘记在中间记录路径,出来要写打印函数,这里用的循环不是递归,最后不要忘记把起点加进去
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define sz(x) ((int) x.size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
struct node {
int x, y, dir;
node() {
}
node(int a, int b, int c): x(a), y(b), dir(c) {
}
} pre[15][15][10];
int sx, sy, ex, ey;
char dir;
int change[4][2] = {