#P3680. 走迷宫

走迷宫

题目描述

有一个 n×mn \times m 格的迷宫(nn 行、mm 列),其中 1 表示可走,0 表示不可走。读入这 n×mn \times m 个数据以及起始点、结束点(起始点和结束点均由两个整数描述,分别表示该点的行号和列号,坐标从 1 开始计数)。

请编程找出所有可行的道路,要求:

  • 所走的路中没有重复的点
  • 只能向上下左右四个方向移动,且按左上右下的顺序拓展(即优先尝试 (0,1)(0,-1)(1,0)(-1,0)(0,1)(0,1)(1,0)(1,0) 方向)

若存在可行路径,输出所有路径(每个点用 (x,y)(x,y) 表示,除起点外,其余点用 "->" 连接);若一条可行路径都没有,则输出 1-1

输入格式

第一行包含两个整数 n,mn, m1<n,m<151 < n, m < 15)。
接下来 nn 行,每行有 mm 个由 1 和 0 组成的数据,代表迷宫。
最后两行分别为起始点和结束点的坐标(行号和列号)。

输出格式

输出所有可行的路径,格式如题目描述。
若没有可行路径,输出 1-1

输入样例

5 6
1 0 0 1 0 1
1 1 1 1 1 1
0 0 1 1 1 0
1 1 1 1 1 0
1 1 1 0 1 1
1 1
5 6

输出样例

(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(3,4)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)