class Solution {
typedef pair<int, int> PII;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc,int color) {
int m = image.size(), n = image[0].size();
int prev=image[sr][sc];
if(prev==color) return image;
queue<PII> q;
q.push({sr, sc});
while (!q.empty()) {
auto [a, b] = q.front();
q.pop();
image[a][b]=color;
for(int i=0;i<4;i++)
{
int x=a+dx[i],y=b+dy[i];
if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==prev)
{
q.push({x,y});
}
}
}
return image;
}
};
class Solution {
int m, n;
typedef pair<int, int> PII;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
bool vis[301][301];
public:
int numIslands(vector<vector<char>>& grid) {
m = grid.size(), n = grid[0].size();
int ret = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1' && !vis[i][j]) {
ret++;
bfs(grid, i, j);
}
}
}
return ret;
}
void bfs(vector<vector<char>>& grid, int i, int j) {
queue<PII> q;
q.push({i, j});
vis[i][j] = true;
while (q.size()) {
auto [a, b] = q.front();
q.pop();
for (int k = 0; k < 4; k++) {
int x = a + dx[k], y = b + dy[k];
if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] &&
grid[x][y] == '1') {
q.push({x, y});
vis[x][y] = true;
}
}
}
}
};
class Solution {
typedef pair<int, int> PII;
int m, n;
bool vis[55][55];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
m = grid.size(), n = grid[0].size();
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == 1 && !vis[i][j]) {
ans = max(ans, bfs(grid, i, j));
}
}
}
return ans;
}
int bfs(vector<vector<int>>& grid, int i, int j) {
int cnt = 0;
queue<PII> q;
q.push({i, j});
vis[i][j] = true;
cnt++;
while (!q.empty()) {
auto [a, b] = q.front();
q.pop();
for (int k = 0; k < 4; k++) {
int x = a + dx[k], y = b + dy[k];
if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] &&
grid[x][y] == 1) {
q.push({x, y});
vis[x][y] = true;
cnt++;
}
}
}
return cnt;
}
};
class Solution {
int m,n;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
bool vis[205][205];
typedef pair<int,int> PII;
public:
void solve(vector<vector<char>>& board) {
m=board.size(),n=board[0].size();
for(int j=0;j<n;j++)
{
if(board[0][j]=='O') bfs(board,0,j);
if(board[m-1][j]=='O') bfs(board,m-1,j);
}
for(int i=0;i<m;i++)
{
if(board[i][0]=='O') bfs(board,i,0);
if(board[i][n-1]=='O') bfs(board,i,n-1);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(board[i][j]=='O') board[i][j]='X';
else if(board[i][j]=='.') board[i][j]='O';
}
}
}
void bfs(vector<vector<char>>& board,int i,int j)
{
queue<PII> q;
q.push({i,j});
board[i][j]='.';
while(!q.empty())
{
auto [a,b]=q.front();
q.pop();
for(int k=0;k<4;k++)
{
int x=a+dx[k],y=b+dy[k];
if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='O')
{
q.push({x,y});
board[x][y]='.';
}
}
}
}
};