#P0186. [经开区2025] 导盲犬迷宫(hand)
[经开区2025] 导盲犬迷宫(hand)
【背景】
芯片生成的密钥被写入导盲犬小 X 的导航 ROM。为测试“右手法则”可靠性,小开把密钥拆成迷宫地图:白格为路,黑格为墙,入口固定在左上角,出口在右下角。小 X 严格按照“能右则右,不能右就原地左转”的右手法则行走,一步一格,不走斜线。小 X 在迷宫中前进的时候,总是用身体的右侧擦着墙壁,只要迷宫的出口和入口都在迷宫边缘,使用该法则走就一定能走出来。
比如下图中的迷宫,最左上角的格子是入口,最右下角格子是出口(本题中,入口和出口的位置总这样假定)。图中每个白格子表示一块路,每个黑格子表示一块墙壁,迷宫的四周也请理解为墙。

图中用粗实线箭头标明了小 X 走出迷宫的路径。
另外,还知道,小 X 不会从所在的格子走到斜对的格子中。
【任务】
如果我们假定从一个格子移动到另一个格子的距离为 1,那么请编写程序计算一下:对于一个给定的迷宫,小 X 走出这个迷宫,一共走了多远的距离。
【输入格式】
第一行为两个整数 M 和 N,保证 M、N 都不会超过 20,表示迷宫的行数和列数。 之后 M 行中,每行是一个长度为 N 的由 0 和 1 组成的字符串,表示迷宫中一行的状态。0 表示那个位置的格子是块路,1 表示那个位置的格子是块墙。
【输出格式】
输出只有一个整数,表示从这个迷宫中走出,小 X 走了多远的距离。
【输入样例】
8 16
0100011110111000
0101000100000010
0101110101010010
0000010101010010
0111010101011010
0100000100001000
0101010101011100
0101010001000100
【输出样例】
64
【数据范围】
对于 100% 的数据:M ≤ 20,N ≤ 20。