按理来说应该使用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;
}

京公网安备 11010502036488号