#include <iostream>
#include <vector>
using namespace std;
void dfs(int i, int j, int n, int m, vector<vector<int>>& best_path,
vector<vector<int>>& temp_path, vector<vector<int>> maze) {
//边界条件:(1)数组越界(2)“墙壁”或已走过
if (i < 0 || i >= n || j < 0 || j >= m || maze[i][j] == 1) {
return;
}
maze[i][j] = 1; //该位置已走过标记为1
temp_path.push_back({i, j}); //将该位置加入路径
if (i == n - 1 && j == m - 1) { //走到终点
//多条路径时best_path记录最小的temp_path
//if(temp_path.size()<best_path.size()||best_path.empty())
//{
// best_path=temp_path;
//}
//本题只有一条通路,所以当到达(n-1,m-1)时,让 best_path=temp_path即可
best_path = temp_path;
}
dfs(i - 1, j, n, m, best_path, temp_path, maze); //上
dfs(i + 1, j, n, m, best_path, temp_path, maze); //下
dfs(i, j - 1, n, m, best_path, temp_path, maze); //左
dfs(i, j + 1, n, m, best_path, temp_path, maze); //右
maze[i][j] = 0; //该结点走不通时,恢复原场面
temp_path.pop_back();//从路径中删除该节点
}
int main() {
int h, w;
cin >> h >> w;
vector<vector<int>> maze(h, vector<int>(w));
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j) {
cin >> maze[i][j];
}
}
vector<vector<int>> best_path;
vector<vector<int>> temp_path;
dfs(0, 0, h, w, best_path, temp_path, maze);
for (vector<vector<int>>::iterator
it = best_path.begin(); it != best_path.end(); it++) {
cout << '(' << (*it)[0] << ',' << (*it)[1] << ')' << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")