本文主要是介绍[LeetCode]130.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’是可以从外界走通的,保留
如果是’O’,说明这是闭塞的,从外界走不通的,替换为’X’。
代码
/**------------------------------------* 日期:2015-02-06* 作者:SJF0115* 题目: 130.Surrounded Regions* 网址:https://oj.leetcode.com/problems/surrounded-regions/* 结果:AC* 来源:LeetCode* 博客:---------------------------------------**/#include <iostream>#include <cstring>#include <vector>#include <queue>#include <algorithm>using namespace std;class Solution {public:void solve(vector<vector<char> > &board) {int row = board.size();if(row == 0){return;}//ifint col = board[0].size();// 都够不成围绕if(row <= 2 || col <= 2){return;}//if// 行for(int i = 0;i < col;++i){// 第一行BFS(board,row,col,0,i);// 最后一行BFS(board,row,col,row-1,i);}//for// 列for(int j = 0;j < row;++j){// 第一列BFS(board,row,col,j,0);// 最后一列BFS(board,row,col,j,col-1);}//forfor(int i = 0;i < row;++i){for(int j = 0;j < col;j++){// 不可以从外界走通的oif(board[i][j] == 'O'){board[i][j] = 'X';}//if// 可以从外界走通的oelse if(board[i][j] == '.'){board[i][j] = 'O';}}//for}//for}private:// row 行数 col 列数 x ,y 当前board位置void BFS(vector<vector<char>> &board,int row,int col,int x,int y){queue<pair<int,int> > q;Pass(board,row,col,x,y,q);while(!q.empty()){pair<int,int> point = q.front();q.pop();x = point.first;y = point.second;// leftPass(board,row,col,x,y+1,q);// rightPass(board,row,col,x,y-1,q);// upPass(board,row,col,x-1,y,q);// downPass(board,row,col,x+1,y,q);}//while}// 四边判断是否走通void Pass(vector<vector<char>> &board,int row,int col,int x,int y,queue<pair<int,int> > &q){// 边界条件以及遇到o才能走通if(x < 0 || x >= row || y < 0 || y >= col || board[x][y] != 'O'){return;}//if// 标记可从外界走通的oboard[x][y] = '.';// 入队列q.push(make_pair(x,y));}};int main(){Solution s;/*vector<vector<char> > board = {{'X','X','X','X'},{'X','O','O','X'},{'X','X','O','X'},{'X','O','X','X'}};*/vector<vector<char> > board = {{'X','X','X'},{'X','O','X'},{'X','X','X'}};s.solve(board);// 输出for(int i = 0;i < board.size();i++){for(int j = 0;j < board[i].size();j++){cout<<board[i][j]<<" ";}//forcout<<endl;}//forreturn 0;}
运行时间
这篇关于[LeetCode]130.Surrounded Regions的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!