残阳如血 @ 2023-07-15 20:31:53
by 残阳如血 @ 2023-07-15 20:32:26
不知道为什么样例输出的是
by hjczmf @ 2023-07-22 13:12:11
@BHPM 我电脑上CE了
by hjczmf @ 2023-07-22 13:16:54
61行、66行、71行
cur 缺少头文件
cur 未定义
电脑报错的
我想问:为啥万能头会缺少头文件?
by cat_lover1 @ 2023-09-20 16:11:14
@残阳如血 我代码输出也是3,完全蒙了,不知道哪儿有问题。我觉得我们思路差不多,我这个代码加了一些输出调试
typedef struct queue{int x,y,t}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,Q[0].t=0;
Check(Time);
do{//putchar('1');
queue f=Q[head++];
if(!notsafe[f.x][f.y])
return d[f.x][f.y];
if(f.t>Time-1)
Check(++Time);
printf("fx=%d fy=%d ft=%d ",f.x,f.y,f.t);
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,
Q[tail++].t=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;
}
}
printf("%d",BFS(0,0));
}