[LEETCODE] Surrounded Regions
LINK:http://leetcode.com/onlinejudge#question_130
大意:给出一个棋盘, 两种棋子X O, 当O完全被X包围时, 将O修改为X.
如:
XXO XXO
XOX -> XXX
XXX XXX
解:简单的DFS从边界扫描不被X包含的O。
CODE
1 class Solution { 2 public: 3 int r; 4 void dfs(int x, int y, vector<vector<char> > &m){ 5 if(x < 0 || x >= r || y < 0 || y >= r || m[x][y] != 'O') return; 6 m[x][y] = '#'; 7 dfs(x, y - 1,m); 8 dfs(x, y + 1,m); 9 dfs(x + 1, y,m); 10 dfs(x - 1, y,m); 11 } 12 13 void solve(vector<vector<char> > &b) { 14 if(b.empty()) return; 15 r = b.size(); 16 17 for(int i = 0; i < r; i++){ 18 dfs(i,0,b); 19 dfs(i,r-1,b); 20 } 21 for(int i = 0; i < r; i++){ 22 dfs(0, i,b); 23 dfs(r-1, i,b); 24 } 25 for(int i = 0; i < r; i++){ 26 for(int j = 0; j < r; j++){ 27 if(b[i][j] == '#') b[i][j] = 'O'; 28 else b[i][j] = 'X'; 29 // printf("%c",b[i][j]); 30 } 31 // puts(""); 32 } 33 } 34 };


浙公网安备 33010602011771号