leetcode - Surrounded Regions
2013-12-10 17:57 张汉生 阅读(181) 评论(0) 编辑 收藏 举报
1 class Solution { 2 public: 3 struct point{ 4 int x; 5 int y; 6 point(int _x, int _y):x(_x),y(_y){} 7 }; 8 void solve(vector<vector<char> > &board){ 9 if (board.size()<=1 || board[0].size()<=1) 10 return; 11 int m=board.size(); 12 int n=board[0].size(); 13 vector<bool> flag(n, false); 14 vector<vector<bool> >visitFlag(m, flag); 15 vector<vector<bool> >checkFlag(m, flag); 16 for (int i=0; i<m; i++) 17 for (int j=0; j<n; j++){ 18 if (visitFlag[i][j]) 19 continue; 20 if (board[i][j] == 'X'){ 21 visitFlag[i][j] = true; 22 continue; 23 } 24 stack<point> sp; 25 vector<point> vp; 26 visitFlag[i][j] = true; 27 sp.push(point(i,j)); 28 bool tF = false; 29 while (!sp.empty()){ 30 point p = sp.top(); 31 sp.pop(); 32 vp.push_back(p); 33 if (p.x==0 || p.x==m-1 || p.y==0 || p.y==n-1) 34 tF = true; 35 if (p.x<m-1 && checkFlag[p.x+1][p.y]) 36 tF = true; 37 if (p.y<n-1 && checkFlag[p.x][p.y+1]) 38 tF = true; 39 if (p.x>0 && checkFlag[p.x-1][p.y]) 40 tF = true; 41 if (p.y>0 && checkFlag[p.x][p.y-1]) 42 tF = true; 43 if (p.x<m-1 && visitFlag[p.x+1][p.y]==false && board[p.x+1][p.y]=='O'){ 44 visitFlag[p.x+1][p.y] = true; 45 sp.push(point(p.x+1,p.y)); 46 } 47 if (p.y<n-1 && visitFlag[p.x][p.y+1]==false && board[p.x][p.y+1]=='O'){ 48 visitFlag[p.x][p.y+1] = true; 49 sp.push(point(p.x,p.y+1)); 50 } 51 if (p.x>0 && visitFlag[p.x-1][p.y]==false && board[p.x-1][p.y]=='O'){ 52 visitFlag[p.x-1][p.y] = true; 53 sp.push(point(p.x-1,p.y)); 54 } 55 if (p.y>0 && visitFlag[p.x][p.y-1]==false && board[p.x][p.y-1]=='O'){ 56 visitFlag[p.x][p.y-1] = true; 57 sp.push(point(p.x,p.y-1)); 58 } 59 } 60 char c = tF ? 'O':'X'; 61 vector<point>::iterator vpi; 62 for (vpi=vp.begin(); vpi!=vp.end(); vpi++){ 63 board[vpi->x][vpi->y] = c; 64 checkFlag[vpi->x][vpi->y] = tF; 65 } 66 } 67 } 68 };