窝也不知道为什么反着BFS就是对的啊QWQ
#include<cstdio> #define ll long long using namespace std; const int N=2005; int n,k,m,B[2],E[2],H,T,px[N*N],py[N*N]; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; bool M[N][N],v[N][N]; inline bool read(){ char ch=getchar(); while(ch!='0'&&ch!='1') ch=getchar(); return ch=='1'; } inline bool solve(){ if(M[B[0]][B[1]]||M[E[0]][E[1]]) return 0; px[H=T=1]=E[0],py[1]=E[1],v[E[0]][E[1]]=1; for(int x,y,X,Y,K=1;K<=k;K++){ H=1; while(H<=T){ x=px[H],y=py[H++]; for(int i=0;i<4;i++){ X=x+dx[i]*K,Y=y+dy[i]*K; if(X>=0&&X<n&&Y>=0&&Y<m&&!v[X][Y]&&!M[X][Y]) v[X][Y]=1,px[++T]=X,py[T]=Y; } } if(v[B[0]][B[1]]) return 1; } return 0; } int main(){ scanf("%d%d%d",&n,&m,&k); scanf("%d%d%d%d",B,B+1,E,E+1); for(int i=0;i<n;i++) for(int j=0;j<m;j++) M[i][j]=read(); if(solve()) puts("Possible"); else puts("Impossible"); return 0; }