Graphs [DFS]
Fast Solution in C++
class Solution {
int row, col;
public:
void solve(vector<vector<char>>& board) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
row = board.size();
if(row<=1)
return;
col = board[0].size();
if(col<=1)
return;
for(int i=0; i<row; i++) {
for(int j=0; j<col; j++) {
if((i==0 || j==0 || i==row-1 || j == col-1) && board[i][j] == 'O') {
dfs(i,j,board);
}
}
}
for(int i=0; i<row; i++) {
for(int j=0; j<col; j++) {
if(board[i][j]=='O')
board[i][j] = 'X';
if(board[i][j] == 'N')
board[i][j] = 'O';
}
}
}
void dfs( int i, int j, vector<vector<char>>& board ) {
if(board[i][j]=='N')
return;
board[i][j] = 'N';
if(i+1 < row && board[i+1][j] == 'O') {
dfs(i+1, j, board);
}
if(i-1 >= 0 && board[i-1][j] == 'O') {
dfs(i-1, j, board);
}
if(j+1 < col && board[i][j+1] == 'O') {
dfs(i, j+1, board);
}
if(j-1 >= 0 && board[i][j-1] == 'O') {
dfs(i, j-1, board);
}
}
};