提交时间:2024-03-19 20:51:35

运行 ID: 138905

#include <bits/stdc++.h> using namespace std; const int N = 111111; bool Map[N][N]; long long path[N][N]; long long n , m; long long dir[8][2] = {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}}; bool check(int x, int y) { return (x > 0 && x <= m && y > 0 && y <= n); } int dfs(long long x,long long y,long long last) { path[x][y] = last; if(x == m && y == n) { return 1; } for(long long i = 0 ; i <= 7 ; i++) { long long xx = x + dir[i][0]; long long yy = y + dir[i][1]; if(check(xx,yy) && !path[xx][yy] && !Map[xx][yy]) { if(dfs(xx,yy,i+1)) { return 1; } } } return 0; } void printWay(int x , int y) { if(y == 1 && x == 1) { cout << 1 << " " << 1 << endl; } else { long long u = path[x][y] - 1; printWay(x-dir[u][0],y-dir[u][1]); cout << x << " " << y << endl; } } int main() { cin >> m >> n; for(long long i = 1; i <= m ; i++) { for(long long j = 1 ; j <= n ; j++) { cin >> Map[i][j]; } } if(dfs(1,1,0)) { printWay(m,n); } else { puts("-1"); } return 0; }