按理来说应该使用bfs
但是这个题图很小,可以偷个懒用dfs,然后直接用一个 vector 记录历史路径
到达终点的时候直接输出这个 vector 然后退出
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e5 + 5; int __t = 1, n, m; int mp[101][101]; vector<pair<int, int>> ans; void dfs(int i, int j) { if (i < 0 || i >= n || j < 0 || j >= m || mp[i][j] == 1) return; mp[i][j] = 1; ans.push_back({i, j}); if (i == n - 1 && j == m - 1) { for (auto pos : ans) { cout << "(" << pos.first << "," << pos.second << ")" << endl; } exit(0); } dfs(i - 1, j); // 上 dfs(i + 1, j); // 下 dfs(i, j - 1); // 左 dfs(i, j + 1); // 右 mp[i][j] = 0; ans.pop_back(); } void solve() { cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> mp[i][j]; } } dfs(0, 0); } int32_t main() { #ifdef ONLINE_JUDGE ios::sync_with_stdio(false); cin.tie(0); #endif // cin >> __t; while (__t--) solve(); return 0; }