#AEAI04016. 含转向成本的路径规划

含转向成本的路径规划

AEAI-04-016. 含转向成本的路径规划

题目描述

底盘在栅格中移动时不仅要付出前进代价,还要为原地转向付出代价。给出起点位置和朝向、目标格、地图风险以及各种动作代价,请计算到达目标格的最小总代价。

朝向编号为 0,1,2,3,分别对应上、右、下、左。每一步可以执行左转、右转、掉头或按当前朝向前进一格。前进到数字风险格时,新增代价为 move + risk_w * risk;前进到 . 时风险为 0;# 不可进入。

若多个方案总代价相同,选择动作数更少的方案。到达目标格时可以是任意朝向,并输出最优方案结束时的朝向编号。

输入格式

第一行输入地图尺寸 H W

第二行输入 move tl tr tb risk_w,分别表示前进、左转、右转、掉头和风险权重。

接下来 H 行输入地图,. 表示风险 0,# 表示障碍,数字字符表示对应风险值。

最后一行输入 sr sc sd gr gc,其中行列坐标为 1-based,sd 为起始朝向编号。

输出格式

若不可达,输出 UNREACHABLE

若可达,输出:

cost actions direction

其中 cost 保留 6 位小数,actions 为动作数,direction 为终点朝向编号。

判定规则

使用标准输出比较。状态为 (行, 列, 朝向),用最小代价优先搜索;平局时动作数更少者优先。

数据范围与测试提示

  • 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
  • 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
  • 转向成本会让步数最短路径不一定最优,隐藏数据会包含方向改变次数不同但总步数相同的路径。
  • 起点、终点、障碍和初始朝向的边界都要按状态空间处理,无法到达时走无解分支。
  • 状态包含朝向,起始朝向编号为 0..3;总代价并列时比较动作数和结束朝向。

样例

输入样例 1

5 6
1 1 1 2 0
......
.##...
...#..
.#....
......
1 1 1 5 6

输出样例 1

10.000000 10 2

输入样例 2

5 5
1 1 1 2 0
.....
.###.
.#.#.
.###.
.....
1 1 1 3 3

输出样例 2

UNREACHABLE