Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
138904 | 周震东 | 迷宫问题 | C++ | 解答错误 | 0 | 3 MS | 356 KB | 1009 | 2024-03-19 20:50:01 |
#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; }