void cal_disw() { memset(disw, -1, sizeof(disw)); deque<Pos> sq(0); for(int i = 0; i < wk.size(); ++i) { disw[wk[i].x][wk[i].y] = 0; sq.push_back(wk[i]); } while(!sq.empty()) { Pos p = sq.front(); sq.pop_front(); int now = disw[p.x][p.y]; for(int d = 0; d < 4; ++d) { p.x += dx[d]; p.y += dy[d]; if(p.inside(n) && disw[p.x][p.y] == -1) { disw[p.x][p.y] = now + 1; sq.push_back(p); } p.x -= dx[d]; p.y -= dy[d]; } } }