给定一个 的网格,行编号从 到 ,列编号从 到 。除最左列 与最右列 外,每一列至多有一个障碍物;最左列与最右列保证没有障碍物。
你从最左列的任意一个格子出发(行自选),目标是到达最右列的任意一个格子(行自选)。假设你当前在第 行第 列,每一步你可以选择下列三种操作之一:
- 向右:从 走到 ;
- 向上:从 走到 ;
- 向下:从 走到 。
不允许向左移动,且任何时刻都不能进入障碍格子,也不能走出网格之外。
共有 个障碍(按列号从小到大排序后编号为 到 )。对每个障碍,你必须选择“从上方绕过”或“从下方绕过”。
若第 个障碍在列 、行 :
- 选择“从上方绕过”时,你在列 时的行编号必须始终 ;
- 选择“从下方绕过”时,你在列 时的行编号必须始终 。
不同列的选择相互独立,共有 种方案。
你的任务:对每一种方案,计算在满足该方案所有限制下,从最左列某行到最右列某行的最小步数;若该方案下无可行路径,输出 -1。