Surrounded Regions
2015-06-21 16:46
323 查看
Description:
Given a 2D board containing
A region is captured by flipping all
For example,
After running your function, the board should be:
Code:
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
Code:
struct vertex { int row; int col; vertex (int x, int y):row(x),col(y) { } }; void BFSTraverse (vector< vector<char> >& board, int i, int j) {//因为值被修改为'S'就说明该元素已被访问,所以本题中可以不用另外的变量记录访问状态 board[i][j] = 'S'; deque<vertex>m; m.push_back( vertex(i,j) ); while ( !m.empty() ) { vertex v = m.front(); m.pop_front(); int mRow = v.row-1; if ( mRow >=0 && board[mRow][v.col] == 'O') {//上面的元素 board[mRow][v.col] = 'S'; m.push_back( vertex(mRow, v.col) ); } mRow = v.row+1; if ( mRow < board.size() && board[mRow][v.col] == 'O') {//下面的元素 board[mRow][v.col] = 'S'; m.push_back( vertex(mRow, v.col) ); } int mCol = v.col - 1; if ( mCol >=0 && board[v.row][mCol] == 'O') {//左面的元素 board[v.row][mCol] = 'S'; m.push_back( vertex(v.row, mCol)); } mCol = v.col + 1; if ( mCol < board[0].size() && board[v.row][mCol] == 'O' ) {//右面的元素 board[v.row][mCol] = 'S'; m.push_back( vertex(v.row, mCol)); } } } void solve(vector< vector<char> >& board) { int row = board.size(); if ( row!=0 ) { int col = board[0].size(); for (int j = 0; j < col; ++j) { if ( board[0][j] == 'O') BFSTraverse (board, 0, j); if ( board[row-1][j] == 'O') BFSTraverse (board, row-1, j); } for (int i = 1; i < row-1; ++i) { if ( board[i][0] == 'O') BFSTraverse (board, i, 0); if ( board[i][col-1] == 'O' ) BFSTraverse (board, i, col-1); } for (int i = 0; i < row; ++i ) { for ( int j = 0; j < col; ++j ) { if (board[i][j] == 'S') board[i][j] = 'O'; else if (board[i][j] == 'O') board[i][j] = 'X'; else ; } }//for }//if }
相关文章推荐
- Python的装饰器模式与面向切面编程详解
- ubuntu开启root用户登录
- ubuntu开启root用户登录
- 体系结构复习3——数据级并行
- Android解析xml文件获取数据练习
- 学生信管数据库
- 使用Spring MVC 4构建Restful服务 搭建Spring MVC 4开发环境八步走
- 人,绩效,职业道德,一个程序员的生命周期,读后感。
- iOS多线程的初步研究(八)-- dispatch队列
- leetcode | Valid Palindrome
- POJ2352:Stars(树状数组)
- iOS评分功能、APP中打开其他应用程序
- iOS评分功能、APP中打开其他应用程序
- JSON之解析通过TouchJSON\SBJSON\JSONKit\NSJSONSeriliz...
- 大约PCA算法学习总结
- java读写数据
- CentOS 6.4下Squid代理服务器的安装与配置【转】
- Git学习总结
- 51nod 1242 斐波那契数列的第N项
- 贪心 - poj3258 River Hopscotch