在水域格子上做广度优先搜索,求出到边界的最短路,并按题目的并列规则留下唯一路径。
请找出小鲤鱼从当前位置游到小岛边界的最短水路。能游出去就算逃生成功;否则失败。
河流中间有一座小岛,地图用 r 行 c 列的二维矩阵给出。格子里只有 0 和 1:0 是水域,1 是陆域。小鲤鱼被困在岛上,只能沿水域向上、下、左、右四格相邻移动,不能走斜线,也不能上陆地。游到矩阵边界上的水域即可回到大河。
小鲤鱼的起点是 (sx,sy)。若该格是陆域,视为无法逃生。
最短水路按下面规则确定:
第一行两个整数 r、c(3≤r≤20,3≤c≤30),表示地图的行数和列数。
第二行两个整数 sx、sy(0≤sx<r,0≤sy<c),表示小鲤鱼当前坐标。
接下来 r 行,每行 c 个整数,元素只为 0 或 1:0 表示水域,1 表示陆域。
第一行输出最短路径长度 d(不含起点)。若无法逃生,输出 −1。
若可以逃生,再输出 d+1 行坐标,每行两个整数,用空格分隔,表示路径上依次经过的格子,第一行是起点。
输入
3 3
1 1
1 1 1
1 0 1
1 1 1
输出
-1
说明
起点在水域,但四周都是陆地,游不到边界。
输入
3 3
1 1
0 0 0
0 0 0
0 0 0
输出
1
1 1
0 1
说明
起点 (1,1) 四周一格就是边界。四个出口 (0,1)、(1,0)、(1,2)、(2,1) 步数都是 1,行号最小的出口是 (0,1),因此向上游一格离开。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册