1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class Solution { public: void solve(vector<vector<char>>& board) { int m = board.size(), n = board[0].size(); queue<pair<int, int>> q; for(int i = 0; i < m; ++i) { dfsIt(board, m, n, i, 0); dfsIt(board, m, n, i, n - 1); } for(int i = 0; i < n; ++i) { dfsIt(board, m, n, 0, i); dfsIt(board, m, n, m - 1, i); } for(int i = 0; i < m; ++i) for(int j = 0; j < n; ++j) if(board[i][j] != '#') board[i][j] = 'X'; else if(board[i][j] == '#') board[i][j] = 'O'; } private: inline void dfsIt(vector<vector<char>>& board, int m, int n, int i, int j) { queue<pair<int, int>> q; q.emplace(i, j); while(!q.empty()) { int i, j; tie(i, j) = q.front(); q.pop(); if(i < 0 || i >= m || j < 0 || j >=n) continue; if(board[i][j] == 'O') { board[i][j] = '#'; q.emplace(i + 1, j); q.emplace(i - 1, j); q.emplace(i, j + 1); q.emplace(i, j - 1); } } } };
|