UVA816 超详细代码解读
题面
思路:一般的迷宫问题都可以转化为最短路径问题,通过BFS求解。特别注意的是该题对于每个点四个方向都有转向限制。此时需要提供一个处理到下一步的函数来规范。函数细节主要是通过数组下标绑定转向和方向,方向便在0123这四个数字中循环。
输入样例:
SAMPLE
3 1 N 3 3
1 1 WL NR *
1 2 WLF NR ER *
1 3 NL ER *
2 1 SL WR NF *
2 2 SL WF ELF *
2 3 SFR EL *
0
NOSOLUTION
3 1 N 3 2
1 1 WL NR *
1 2 NL ER *
2 1 SL WR NFR *
2 2 SR EL *
0
END
输出样例:
SAMPLE
(3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1)
(2,2) (1,2) (1,3) (2,3) (3,3)
NOSOLUTION
No Solution Possible
代码附解读(BFS结构基本没有特意解读):
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10;//3*3的表格
const char*dirs="NESW";//四个方向
const char*turns="FLR";//三个转向
int dir_id(char c){
return strchr(dirs,c)-dirs;}//得到是第几个方向方便后续匹配
int turn_id(char c){
return strchr(turns,c)-turns;}//得到是第几个转向方便后续匹配
const int dr[<