Advertisement
Guest User

Untitled

a guest
Sep 20th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. struct Coord {
  2. int x;
  3. int y;
  4. Coord(int tmp_x, int tmp_y): x(tmp_x), y(tmp_y) {}
  5. };
  6.  
  7. class Solution {
  8. public:
  9. void solve(vector<vector<char>>& board) {
  10. if (board.empty() || board.size() == 0 || board[0].empty() || board[0].size() == 0) return;
  11. four_ways = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
  12. for (int i = 0; i < board.size(); i++) {
  13. for (int j = 0; j < board[0].size(); j++) {
  14. if (i == 0 || i == board.size() - 1 || j == 0 || j == board[0].size() - 1) {
  15. if (board[i][j] == 'O') {
  16. Coord c(i, j);
  17. bfs(board, c);
  18. }
  19. }
  20. }
  21. }
  22. for (int i = 0; i < board.size(); i++) {
  23. for (int j = 0; j < board[0].size(); j++) {
  24. if (board[i][j] == 'O') board[i][j] = 'X';
  25. else if (board[i][j] == 'Y') board[i][j] = 'O';
  26. }
  27. }
  28. }
  29. private:
  30. vector<vector<int>> four_ways;
  31. void bfs(vector<vector<char>>& board, Coord& c) {
  32. queue<Coord> Q;
  33. Q.push(c);
  34. board[c.x][c.y] = 'Y';
  35. while(!Q.empty()) {
  36. Coord tmp_c = Q.front(); Q.pop();
  37. for (int i = 0; i < 4; i++) {
  38. Coord new_c(tmp_c.x + four_ways[i][0], tmp_c.y + four_ways[i][1]);
  39. if (is_valid(board, new_c)) {
  40. Q.push(new_c);
  41. board[new_c.x][new_c.y] = 'Y';
  42. }
  43. }
  44. }
  45. }
  46. bool is_valid(vector<vector<char>>& board, Coord& c) {
  47. if (c.x < 0 || c.x >= board.size() || c.y < 0 || c.y >= board[0].size() || board[c.x][c.y] == 'X' || board[c.x][c.y] == 'Y') return false;
  48. return true;
  49. }
  50. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement