简单的bfs,搜索第一行每个点在最后一行所能覆盖到的点并标记为arrive
结果:WA第三个点;TLE第五个点
其中第三个测试点在末行有28个连续的点(451~479)没有搜索到
place表示每个点的高度(这里我用了一维数组记录平面上的点)
弄了两天了。。
bool judge(int head,int d){
if(used[head+d] || (d==1 && head%m==m-1) || (d==-1 && head%m==0) || (d==-m && head<m))
return 0;
if(place[head]<=place[head+d])
return 0;
used[head+d]=1;
return 1;
}
void do_bfs(){
for(int k=0;k<m;k++){
memset(used,0,sizeof(used));
bfs.push(k);
used[k]=1;
while(!bfs.empty()){
int head=bfs.front();
bfs.pop();
if(head>=m*n){
arrive[head%m]=1; continue;
}
if(judge(head,1))
bfs.push(head+1);
if(judge(head,-1))
bfs.push(head-1);
if(judge(head,m))
bfs.push(head+m);
if(judge(head,-m))
bfs.push(head-m);
}
}
}