[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 };

 

posted @ 2013-04-23 19:43  Shamaoer  阅读(140)  评论(0)    收藏  举报