提交时间:2023-10-19 13:41:23

运行 ID: 107088

#include <bits/stdc++.h> using namespace std; bool mp[114][114]; bool mark[114][114]; bool gx[] = {1,-1,1,-1,0,-1,1,0}; bool gy[] = {1,-1,-1,1,-1,0,0,1}; int n,m; bool check(int xx, int yy) { return (0<=xx&&xx<=n&&0<=yy&yy<=n); } int ans1[114514],ans2[114514]; void dfs(int step, int xx, int yy) { if(xx==n&&yy==m) { cout << "0 0\n"; for(int i = 1; i <= n; i++) { cout << ans1[i] << " " << ans2[i] << endl; } exit(0); } for(int i = 0; i < 8; i++) { for(int j = 0; j < 8; j++) { if(mp[xx+gx[i]][yy+gy[i]]||(!check(xx+gx[i],yy+gy[i]))||mark[xx+gx[i]][yy+gy[i]]) { continue; } // cout << "simida" << endl; mark[xx+gx[i]][yy+gy[i]]=true; ans1[step+1]=xx+gx[i]; ans2[step+1]=yy+gy[i]; dfs(step+1,xx+gx[i],yy+gy[i]); mark[xx+gx[i]][yy+gy[i]]=false; } } } signed main() { cin >> n >> m; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cin >> mp[i][j]; } } dfs(0,0,0); cout << "-1" << endl; return 0; }