提交时间:2024-03-19 20:50:01

运行 ID: 138904

#include <bits/stdc++.h> using namespace std; const int N = 105; bool Map[N][N]; int path[N][N]; int n , m; int 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(int x,int y,int last) { path[x][y] = last; if(x == m && y == n) { return 1; } for(int i = 0 ; i <= 7 ; i++) { int xx = x + dir[i][0]; int 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 { int u = path[x][y] - 1; printWay(x-dir[u][0],y-dir[u][1]); cout << x << " " << y << endl; } } int main() { cin >> m >> n; for(int 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; }