我按照 mulberror 的题解做这题时写出了 3 个 bug:
- bfs 不要写假了,队列可能要开 8N,因为一个点可能 8 次重复入队(视实现方法确定)。
check 里要判断 couldrm。
- 如果你用二进制编码方向,取第 2 位是和 2 位与
x&0b10,取低 2 位是和 3 位与 x&0b11。
bool couldrm(int i) {
return true;
}
void check(int x, int y) {
for (int w=0; w<4; w++) {
int i = get(x, y, w);
if (~i && couldrm(i)) qu[tl++] = i;
}
}
int main() {
while (hd < tl) {
int i = qu[hd++];
if (ip[i]) remove(i);
else continue;
check(x1[i], y1[i]);
check(x2[i], y2[i]);
}
}