classSolution{public:typedef pair<int,int> pii;vector<vector<int>> dir ={{1,0},{0,1},{-1,0},{0,-1}};intlargestArea(vector<string>& grid){int m = grid.size(), n = grid[0].size();vector<vector<bool>>vis(m, vector<bool>(n,false));for(int i =0; i < m;++i){for(int j =0; j < n;++j){if(vis[i][j])continue;if((i==0|| i==m-1|| j==0|| j==n-1)&& grid[i][j]!='0'){// 邊界 且 不為 0,也是跟外側連通的bfs(grid, vis, m, n, i, j);}elseif(grid[i][j]=='0'){// 當前是 0, 檢查周圍的位置vis[i][j]=true;for(int k =0; k <4;++k){int nx = i + dir[k][0];int ny = j + dir[k][1];if(nx>=0&& nx<m && ny>=0&& ny<n &&!vis[nx][ny]&& grid[nx][ny]!='0'){// 周圍的位置未訪問,且不為 0,也是跟走廊相鄰的bfs(grid, vis, m, n, nx, ny);}}}}}int maxArea =0;for(int i =0; i < m;++i){for(int j =0; j < n;++j){// 剩余的不跟走廊相鄰的區域if(vis[i][j])continue;maxArea =max(maxArea,bfs(grid, vis, m, n, i, j));}}return maxArea;}intbfs(vector<string>& grid, vector<vector<bool>>&vis,int m,int n,int i,int j){int area =0;char color = grid[i][j];// 顏色vis[i][j]=true;queue<pii> q;q.push({i, j});while(!q.empty()){int x = q.front().first;int y = q.front().second;q.pop();area++;for(int k =0; k <4;++k){int nx = x + dir[k][0];int ny = y + dir[k][1];if(nx>=0&& nx<m && ny>=0&& ny<n &&!vis[nx][ny]&& grid[nx][ny]==color){// 在范圍內,未訪問,顏色一樣vis[nx][ny]=true;q.push({nx, ny});}}}return area;}};