class Solution { public: void deal(int i,int j,vector<vector<char>>&board,int h,int w) { typedef pair<int,int> point; queue<point>q; q.push(point(i,j)); board[i][j]='1'; while(!q.empty()) { point tmp=q.front(); q.pop(); int x=tmp.first,y=tmp.second; if(x!=0&&board[x-1][y]=='O') { q.push(point(x-1,y)); board[x-1][y]='1'; } if(x!=h-1&&board[x+1][y]=='O') { q.push(point(x+1,y)); board[x+1][y]='1'; } if(y!=0&&board[x][y-1]=='O') { q.push(point(x,y-1)); board[x][y-1]='1'; } if(y!=w-1&&board[x][y+1]=='O') { q.push(point(x,y+1)); board[x][y+1]='1'; } } } void solve(vector<vector<char>>& board) { int h=board.size(); if(h==0) return ; int w=board[0].size(); if(w==0) return ; int i,j; for(i=0;i<h;i++) { if(board[i][0]=='O') deal(i,0,board,h,w); if(board[i][w-1]=='O') deal(i,w-1,board,h,w); } for(j=0;j<w;j++) { if(board[0][j]=='O') deal(0,j,board,h,w); if(board[h-1][j]=='O') deal(h-1,j,board,h,w); } for(i=0;i<h;i++) { for(j=0;j<w;j++) { if(board[i][j]=='1') board[i][j]='O'; else board[i][j]='X'; } } } };