Given a 2D board containing
A region is captured by flipping all
'X'
and 'O'
(the letter O), capture all regions surrounded by 'X'
.A region is captured by flipping all
'O'
s into 'X'
s in that surrounded region.Example:
X X X X
X O O X
X X O X
X O X X
X X X X
X X X X
X X X X
X O X X
Approach
Java
import java.util.Arrays;public class SurroundedRegions {public static void main(String[] args) {char board[][] = { { 'X', 'X', 'X', 'X' }, { 'X', 'O', 'O', 'X' },{ 'X', 'X', 'O', 'X' }, { 'X', 'O', 'X', 'X' } };solve(board);System.out.println(Arrays.deepToString(board));}static boolean isValid(int x, int y, int n, int m) {if (x < 0 || x >= n || y < 0 || y >= m)return false;return true;}static int dx[] = { -1, 0, 1, 0 };static int dy[] = { 0, 1, 0, -1 };static void dfs(char[][] board, int x, int y, char prevc, char newc) {if (x < 0 || x >= board.length || y < 0 || y >= board[0].length)return;if (board[x][y] != prevc)return;board[x][y] = newc;for (int i = 0; i < 4; i++) {if (isValid(dx[i] + x, dy[i] + y, board.length, board[0].length)) {dfs(board, dx[i] + x, dy[i] + y, prevc, newc);}}}static void solve(char[][] board) {int n = board.length;// if empty gridif (n == 0)return;int m = board[0].length;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (board[i][j] == 'O')board[i][j] = '-';}}for (int i = 0; i < n; i++) {if (board[i][0] == '-') {dfs(board, i, 0, '-', 'O');}}for (int i = 0; i < n; i++) {if (board[i][m - 1] == '-') {dfs(board, i, m - 1, '-', 'O');}}for (int i = 0; i < m; i++)if (board[0][i] == '-')dfs(board, 0, i, '-', 'O');for (int i = 0; i < m; i++) {if (board[n - 1][i] == '-') {dfs(board, n - 1, i, '-', 'O');}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (board[i][j] == '-') {board[i][j] = 'X';}}}}}
C++
#include <bits/stdc++.h>using namespace std;bool isValid(int x,int y,int n,int m){if(x<0||x>=n||y<0||y>=m)return false;return true;}int dx[]={-1,0,1,0};int dy[]={0,1,0,-1};void dfs(vector<vector<char>> &board,int x,int y,char prevc ,char newc){if(x<0 ||x>=board.size()||y<0||y>=board[0].size())return;if(board[x][y]!=prevc)return;board[x][y]=newc;for(int i=0;i<4;i++){if(isValid(dx[i]+x,dy[i]+y,board.size(),board[0].size())){dfs(board,dx[i]+x,dy[i]+y,prevc,newc);}}}void solve(vector<vector<char>>& board){int n=board.size();//if empty gridif(n==0)return ;int m=board[0].size();for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(board[i][j]=='O')board[i][j]='-';}}for (int i=0; i<n; i++){if (board[i][0] == '-'){dfs(board, i, 0, '-', 'O');}}for (int i=0; i<n; i++){if (board[i][m-1] == '-'){dfs(board, i, m-1, '-', 'O');}}for (int i=0; i<m; i++)if (board[0][i] == '-')dfs(board, 0, i, '-', 'O');for (int i=0; i<m; i++){if (board[n-1][i] == '-'){dfs(board, n-1, i, '-', 'O');}}for (int i=0; i<n; i++){for (int j=0; j<m; j++){if (board[i][j] == '-'){board[i][j] = 'X';}}}}int main(){vector<vector<char>> board={{'X','X','X','X'},{'X','O','O','X'},{'X','X','O','X'},{'X','O','X','X'}};solve(board);cout<<"[";for(int i=0;i<board.size();i++){cout<<"[";for(int j=0;j<board[i].size();j++){cout<<board[i][j];if(j!=board[i].size()-1)cout<<",";}if(i!=board.size()-1)cout<<"],\n";elsecout<<"]";}cout<<"]";}
No comments:
Post a Comment