#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
0000001010101001
0011101010101101
0010000010000100
0101010101110001
0101000100010100

【输出样例】

64

【数据范围】

对于 100% 的数据:M ≤ 20,N ≤ 20。