请教,以下bfs在判定出界时是否有误
查看原帖
请教,以下bfs在判定出界时是否有误
372708
Yahbim楼主2020/12/26 20:38

简单的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);
		}
	}	
}
2020/12/26 20:38
加载中...