#include <deque> #include <iostream> #include <vector> using namespace std; vector<pair<int, int> > res; void dfs(vector<vector<int>>& matrix, int n, int m, int i, int j, vector<pair<int, int>>& paths){ //记录 与 回溯的过程。 // 进入该路径,标记为一,下次不再走这条路径 paths.push_back(make_pair(i,j)); matrix[i][j] = 1; // 退出条件 if(i == n-1 && j == m - 1){ res = paths; return ; } // 向4个方向搜索: // 向上 if(i-1 >= 0 && matrix[i-1][j] == 0){ dfs(matrix, n, m, i-1, j, paths); } // 向下 if(i+1 < n && matrix[i+1][j] == 0){ dfs(matrix, n, m, i+1, j, paths); } // 向左 if(j-1 >= 0 && matrix[i][j-1] == 0){ dfs(matrix, n, m, i, j-1, paths); } // 向右 if(j+1 < m && matrix[i][j+1] == 0){ dfs(matrix, n, m, i, j+1, paths); } // 回溯 paths.pop_back(); matrix[i][j] = 0; } int main() { int n, m; cin >> n >> m; vector<vector<int>> matrix(n, vector<int>(m, 0)); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin >> matrix[i][j]; } } vector<pair<int,int>> paths; // 用于存放临时路径 dfs(matrix, n, m, 0, 0, paths); //dfs遍历矩阵 for(int i = 0; i < res.size(); i++) //输出路径 cout << "(" << res[i].first << "," << res[i].second << ")" << endl; } // 64 位输出请用 printf("%lld")