UVA816 紫书

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[<
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就叫我扶蘇吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值