第一次交和最后一次交,只改了一下标记走过的位置。
但是放在遍历四个方向的循环中就 AC,放在外面就 TLE。
蒟蒻不明白为啥,求大佬解答!!
原始:
bool check(int mid){
memset(vis, 0, sizeof(vis));
queue <node> Q;
Q.push({1, 1});
vis[1][1] = true;
while(!Q.empty()){
node fr = Q.front(); Q.pop();
vis[fr.x][fr.y] = true;
if(fr.x == n) return true;
for(int i = 1; i <= 4; i++){
int xx = fr.x + fx[i], yy = fr.y + fy[i];
if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && !vis[xx][yy]){
if(p[xx][yy] <= mid) Q.push({xx, yy});
}
}
}
return false;
}
最后:
bool check(int mid){
memset(vis, 0, sizeof(vis));
queue <node> Q;
Q.push({1, 1});
vis[1][1] = true;
while(!Q.empty()){
node fr = Q.front(); Q.pop();
if(fr.x == n) return true;
for(int i = 1; i <= 4; i++){
int xx = fr.x + fx[i], yy = fr.y + fy[i];
if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && !vis[xx][yy]){
if(p[xx][yy] <= mid) Q.push({xx, yy}), vis[xx][yy] = true;
}
}
}
return false;
}