第十届蓝桥杯省赛D题,迷宫求从(0,0)->(n,m)的最短路径。
本来如果只是求最短路的话倒没什么,一遍BFS就可以解决。但是要求如果存在多条最短路,取路径字典序最小的那条。其中路径由U D L R
四种字符组成,分别表示上 下 左 右
。
譬如,下面这个迷宫的最短路为DRRURRDDDR
。
题解
这道题和之前整理过的Uva1599有点类似。
一种策略是和Uva1599的做法一样,先从终点开始反向求一遍BFS,再根据距离信息从起点出发选择方向字典序小的走直到终点。
和Uva1599不同的是,这道题中每个位置相邻的四个可走方向优先级固定,且不存在优先级相同的情况,所以另一种策略是直接从起点BFS每次优先把方向字典序小的位置加入队列中,并记录路径。
代码
题目中给定了一个maze.txt,代码是根据文件中的迷宫来写的。
maze.txt以及原题pdf链接
策略1
1 | /* |
策略2
1 | /* |