#include <iostream> #include <stack> #include <vector> using namespace std; bool findPath(vector<vector<int>>& maze, int m, int n) { stack<pair<int, int>> path; vector<vector<int>> visited(m, vector<int>(n, 0)); path.push(make_pair(1, 1)); visited[1][1] = 1; while (!path.empty()) { pair<int, int> current = path.top(); int x = current.first; int y = current.second; if (x == m - 2 && y == n - 2) { return true; } if (x + 1 < m && maze[x + 1][y] == 0 && visited[x + 1][y] == 0) { path.push(make_pair(x + 1, y)); visited[x + 1][y] = 1; } else if (y + 1 < n && maze[x][y + 1] == 0 && visited[x][y + 1] == 0) { path.push(make_pair(x, y + 1)); visited[x][y + 1] = 1; } else if (x - 1 >= 0 && maze[x - 1][y] == 0 && visited[x - 1][y] == 0) { path.push(make_pair(x - 1, y)); visited[x - 1][y] = 1; } else if (y - 1 >= 0 && maze[x][y - 1] == 0 && visited[x][y - 1] == 0) { path.push(make_pair(x, y - 1)); visited[x][y - 1] = 1; } else { path.pop(); } } return false; } int main() { int m, n; cin >> m >> n; vector<vector<int>> maze(m, vector<int>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> maze[i][j]; } } if (findPath(maze, m, n)) { stack<pair<int, int>> path; int x = 1, y = 1; while (x != m - 2 || y != n - 2) { path.push(make_pair(x, y)); if (x + 1 < m && maze[x + 1][y] == 0) { x = x + 1; } else if (y + 1 < n && maze[x][y + 1] == 0) { y = y + 1; } else if (x - 1 >= 0 && maze[x - 1][y] == 0) { x = x - 1; } else if (y - 1 >= 0 && maze[x][y - 1] == 0) { y = y - 1; } } while (!path.empty()) { pair<int, int> current = path.top(); cout << current.first << " " << current.second << endl; path.pop(); } } return 0; } [2024-11-03 12:34:22 | AI写代码神器 | 1466点数解答]