题目链接
题目大意
$m * n$的矩阵,每个格子是0
或者1
,探险家初始位置是$(1, 1)$,终点位置是$(n, m)$,且只能向 上下左右四个方向走,因为从 起点到终点 所走的路径是由01
构成的,故可表示成二进制数,要求寻找一条路径表示的二进制数最小.
样例解释
2
//T 两组测试样例2 2
// n,m, 行 列11
//第一行11
//第二行 路径为$(1,1)->(1,2)->(2,2)$(也可以是其他),故为111
3 3
//n, m001
111
101
//路径为$(1,1)->(1,2)->(2,2)->(3->2)->(3,3)$故为00101,即101
解题思路
因为是二进制,所以要尽可能的走0,走0走的离终点越近越好.
- 第一步: 一直走
0
,走到不能走0为止,从这些0中挑出来所有距离终点 曼哈顿距离最小的 - 第二步: 从第一步挑出来的 0 为起点 搜索,且只搜
右
和下
两个方向遍历每一层,如果该层有 0 必然选择 0,并把 0 加入队列,如果该层只有 1 ,则把所有的 1 都加入队列,依次遍历下一层.
代码
1 | //Author LJH |