Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int n, m;
- void dfs(vector<vector<char>> &board, int x, int y, int d, vector<vector<vector<bool>>> &visited)
- {
- if (x == n || x == -1 || y == -1 || y == m)
- {
- if (x == n)
- {
- dfs(board, x - 1, y, 2, visited);
- }
- else if (x == -1)
- {
- dfs(board, x + 1, y, 0, visited);
- }
- else if (y == m)
- {
- dfs(board, x, y - 1, 1, visited);
- }
- else if (y == -1)
- {
- dfs(board, x, y + 1, 3, visited);
- }
- return;
- }
- if (visited[x][y][d])
- {
- return;
- }
- visited[x][y][d] = true;
- if (board[x][y] != 'X')
- {
- if (d == 0)
- {
- dfs(board, x, y + 1, 0, visited);
- }
- else if (d == 1)
- {
- dfs(board, x + 1, y, 1, visited);
- }
- else if (d == 2)
- {
- dfs(board, x, y - 1, 2, visited);
- }
- else
- {
- dfs(board, x - 1, y, 3, visited);
- }
- }
- else
- {
- if (d == 0)
- {
- dfs(board, x, y - 1, 1, visited);
- }
- else if (d == 1)
- {
- dfs(board, x - 1, y, 2, visited);
- }
- else if (d == 2)
- {
- dfs(board, x, y + 1, 3, visited);
- }
- else
- {
- dfs(board, x + 1, y, 0, visited);
- }
- }
- }
- void solve()
- {
- cin >> n >> m;
- vector<vector<char>> board(n, vector<char>(m));
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- cin >> board[i][j];
- }
- }
- vector<vector<vector<bool>>> visited(n, vector<vector<bool>>(m, vector<bool>(4, false)));
- dfs(board, 0, 0, 0, visited);
- int ans = 0;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- if (board[i][j] == 'X')
- continue;
- bool isVisited = false;
- for (int d = 0; d < 4; d++)
- {
- isVisited |= visited[i][j][d];
- }
- ans += (isVisited == true);
- }
- }
- cout << ans << endl;
- return;
- }
Add Comment
Please, Sign In to add comment