#include #include #define MAX 256 #define M 1e-15 int zadani; int r,c,r1,r2,c1,c2,h[MAX][MAX],vis[MAX][MAX],min[MAX][MAX]; int fr[MAX*MAX],fc[MAX*MAX],f,fp; int okayv(int X1, int Y1, int Z1, int X2, int Y2, int Z2) { int i,j1,j2,x,y,z; double t,X,Y,Z,XD,YD,ZD; if (X1>X2) { x=X1; X1=X2; X2=x; y=Y1; Y1=Y2; Y2=y; z=Z1; Z1=Z2; Z2=z; } if (X1=Z-M) return 0; if (h[i][j2]>=Z-M) return 0; /* printf("%lf %lf %lf %lf %lf\n",X,Y,Z,YD,ZD); */ } } if (Y1>Y2) { x=X1; X1=X2; X2=x; y=Y1; Y1=Y2; Y2=y; z=Z1; Z1=Z2; Z2=z; } if (Y1=Z-M) return 0; if (h[j2][i]>=Z-M) return 0; } } return 1; } int checkv(int R, int C) { if (okayv(R,C,h[R][C]+1,r1,c1,h[r1][c1]+1)) return 1; if (okayv(R,C,h[R][C]+1,r2,c2,h[r2][c2]+1)) return 1; return 0; } void step(int R, int C, int H, int D) { if (R<0||C<0||R>=r||C>=c) return; if (h[R][C]H+1) return; if (min[R][C]>=0) return; if (vis[R][C]==-1) vis[R][C]=checkv(R,C); if (vis[R][C]==0) return; /* printf("New: %d %d %d\n",R,C,D+1); */ fr[f]=R; fc[f]=C; min[R][C]=D+1; f++; } int main() { int i,j; scanf("%d",&zadani); while (zadani--) { scanf("%d %d",&r,&c); for (i=0; i