zoukankan      html  css  js  c++  java
  • 22. Surrounded Regions

    Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.

    A region is captured by flipping all 'O's into 'X's in that surrounded region.

    For example,

    X X X X
    X O O X
    X X O X
    X O X X
    

    After running your function, the board should be:

    X X X X
    X X X X
    X X X X
    X O X X
    

    思想: 先从边缘是 'O' 的结点开始进行深搜,若是 'O', 则设置已访问为 true. 接着对其余所有非边界结点进行遍历,若是 'O' 且未访问,则将该结点重置为 'X' .

    typedef pair<int, int> point;
    void dfs(point p, int r, int c, vector<vector<char> > &board, vector<vector<bool> > &visited) {
        visited[p.first][p.second] = true;
        int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
        for(int i = 0; i < 4; ++i) {
            int x = p.first + dx[i], y = p.second + dy[i];
            if(0 < x && x < r && 0 < y && y < c && board[x][y] == 'O' && !visited[x][y])
                dfs(point(x, y), r, c, board, visited);
        }
    }
    class Solution {
    public:
    	void solve(vector<vector<char>> &board) {
    	    if(!board.size() || !board[0].size()) return;
    		int row = board.size(), col = board[0].size();
    		vector<vector<bool>> visited(row, vector<bool>(col, false));
    		for(int j = 0; j < col; ++j) {
    			if(board[0][j] == 'O' && !visited[0][j]) dfs(point(0, j), row, col, board, visited);
    			if(board[row-1][j] == 'O' && !visited[row-1][j]) dfs(point(row-1, j), row, col, board, visited);
    		}
    		for(int i = 0; i < row; ++i) {
    			if(board[i][0] == 'O' && !visited[i][0]) dfs(point(i, 0), row, col, board, visited);
    			if(board[i][row-1] == 'O' && !visited[i][row-1]) dfs(point(i, col-1), row, col, board, visited);
    		}
    		for(int i = 1; i < row-1; ++i) 
    			for(int j = 1; j < col-1; ++j) 
    				if(board[i][j] == 'O' && !visited[i][j])
    					board[i][j] = 'X';
    	}
    };
    
  • 相关阅读:
    过国内外的waf的一些奇淫绝技<转>
    杂七杂八的敏感文件注释<持续更新帖>
    [讨论]“传递式”的攻击思想<转LN>
    无线hacking集合贴,持续更新~
    dede找后台《转》
    开源MFC扩展界面库:Ultimate Toolbox的编译(转)
    【转】Windows环境下设置Tomcat6启动参数
    [转]关于dll文件的生成以及找不到jni.h的解决办法
    VBA 7788
    ODBC连接EXCEL的一些问题
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3938445.html
Copyright © 2011-2022 走看看