Submit Time:2025-06-08 15:55:28

运行 ID: 38004

#include<bits/stdc++.h> #define ll long long using namespace std; ll a[1005][1005][5]; ll n,s,t,ans[1005][1005],ax[1000005],ay[1000005],tot; bool vis[1005][1005]; ll dx[10]={0,-1,1},dy[10]={0,0,0,-1,1}; ll dep[1005][1005]; void print(){ // printf("%lld\n",tot); // for(ll i=1;i<=tot;i++){ // printf("%lld %lld\n",ax[i],ay[i]); // } for(ll i=1;i<=n;i++){ for(ll j=1;j<=n;j++){ printf("%lld ",ans[i][j]); } printf("\n"); } } void dfs2(ll x,ll y,ll zx,ll zx2){ for(ll i=1;i<=4;i++){ ll nx=x+dx[i],ny=y+dy[i]; if(a[x][y][i]&&!vis[nx][ny]){ if(nx<zx2) continue; vis[nx][ny]=1; if(nx>=zx) ans[nx][ny]=2; else ans[nx][ny]=1; dfs2(nx,ny,zx,zx2); } } } bool dfs(ll x,ll y){ tot++; ax[tot]=x; ay[tot]=y; if(x==n&&y==t) return 1; vis[x][y]=1; for(ll i=1;i<=4;i++){ ll nx=x+dx[i],ny=y+dy[i]; if(a[x][y][i]&&!vis[nx][ny]){ if(dfs(nx,ny)) return 1; } } tot--; vis[x][y]=0; return 0; } void sol(){ ll zx2=1005,zx=1005; for(ll i=tot;i>=1;i--){ ll x=ax[i],y=ay[i]; if(i!=tot) dep[x][y]=min(x,dep[ax[i+1]][ay[i+1]]); else dep[x][y]=x; zx2=min(zx2,x); ans[x][y]=1; if(dep[x][y]<x) ans[x][y]=2,zx=min(zx,x); if(ax[i]+1==ax[i+1]&&ans[x+1][y]!=2) continue; if(i==tot) continue; dfs2(x,y,min(zx,x+1),zx2); } } int main(){ ios::sync_with_stdio(0); cin>>n>>s>>t; for(ll i=1;i<=n;i++){ for(ll j=1;j<=n;j++){ ll tmp; cin>>tmp; if(!tmp){ a[i][j][1]=1; a[i-1][j][2]=1; } } } for(ll i=1;i<=n;i++){ for(ll j=1;j<=n;j++){ ll tmp; cin>>tmp; if(!tmp){ a[i][j][3]=1; a[i][j-1][4]=1; } } } dfs(1,s); sol(); print(); return 0; }