不知道为什么样例输出3,这个程序加了一些输出用来调试
typedef struct queue{int x,y}queue;
_Bool notsafe[301][301];
M,T[50000],X[50000],Y[50000],d[301][301];
dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
_Bool H[301][301];L;
/*Qsort(L,R){//题目已经有序
if(L>=R)return;
int I=L,J=R,xT=t[L],xX=X[L],xY=Y[L],tT,tX,tY;
do{
while(I<J&&T[J]>xT)--J;
if(I<J)tT=xT,xT=T[J],T[j]=tT,tX=xX,xX=X[j],X[j]=tX,tY=xY,xY=Y[j],Y[j]=tY;
while(i<j&&T[i]<xT)++i;
if(i<j)tT=xT,xT=T[j],T[j]=tT,tX=xX,xX=X[j],X[j]=tX,tY=xY,xY=Y[j],Y[j]=tY;
}while(I<J);
T[L]=xT,X[L]=xX,Y[L]=xY;
qsort(L,)
}*/
Check(Time){
int i;
for(i=L;i<M;++i)
if(T[i]==Time){
H[X[i]][Y[i]]=1;
for(int j=0;j<4;++j){
int x=X[i]+dx[j],y=Y[i]+dy[j];
if(x>=0&&x<=300&&y>=0&&y<=300)
H[x][y]=1;
}
}
L=i;
}
BFS(x,y){
//putchar('0');
d[x][y]=0;
queue Q[100000];
//putchar('1');
int head=0,tail=1,Time=0;
Q[0].x=x,Q[0].y=y;
Check(Time);
do{//putchar('1');
queue f=Q[head++];
if(!notsafe[f.x][f.y])
return d[f.x][f.y];
if(d[f.x][f.y]>Time-1)
Check(++Time);
printf("fx=%d fy=%d ft=%d ",f.x,f.y,d[f.x][f.y]);
for(int i=0;i<4;++i){
int x=f.x+dx[i],y=f.y+dy[i];
if(x>=0&&x<=300&&y>=0&y<=300
&&!H[x][y]&&d[x][y]==-1)printf("x=%d y=%d ",x,y),
Q[tail].x=x,Q[tail++].y=y,
d[x][y]=d[f.x][f.y]+1;
}
printf("head=%d tail=%d\n",head,tail);
}while(head<tail);
return -1;
}
main(){
memset(d,-1,sizeof(d));
scanf("%d",&M);
for(int i=0;i<M;++i){
scanf("%d%d%d",X+i,Y+i,T+i),notsafe[X[i]][Y[i]]=1;
for(int j=0;j<4;++j){
int x=X[i]+dx[j],y=Y[i]+dy[j];
if(x>=0&&x<=300&y>=0&&y<=300)
notsafe[x][y]=1;
}
}
for(int i=0;i<30;++i,puts(""))
for(int j=0;j<30;++j)
putchar(notsafe[i][j]?49:48);
printf("%d",BFS(0,0));
}