Surrounded Regions
来源:互联网 发布:知乎 网页版 编辑:程序博客网 时间:2024/05/01 19:32
pro:给一个图,图包含'X'和‘O’,将图中所有的被包围的'O'置为‘X’,被包围的意思是周围都是'X',没有到边界。
sol:有两个做法
做法1:从每一个没被访问过的'O'开始,bfs或dfs,记录下这次有没有通过某个‘O’到达了边界,有的话就是不能置为'X'的,没有的话就能
做法2:逆向思维,从矩阵的四边找,扩展所有能扩展的'O'.剩下的就是被包围的
此题网页1A,awesome!
code:
class Solution {public: bool isOK(int x,int y,int n,int m,vector< vector<bool> > &used,vector< vector<char> > &board) { if(x>=0&&x<n&&y>=0&&y<m&&used[x][y]==false&&board[x][y]=='O') return true; else return false; } void bfs(vector< vector<bool> > &used,vector< vector<char> > &board,int x,int y) { int i,j,n,m; n = board.size(),m=board[0].size(); queue<int> xque,yque; while(!xque.empty()) xque.pop(); while(!yque.empty()) yque.pop(); xque.push(x),yque.push(y); used[x][y]=true; int dir[4][2]={0,1,0,-1,1,0,-1,0}; int frontx,fronty,tempx,tempy,t; while(!xque.empty()) { frontx = xque.front(); fronty = yque.front(); xque.pop(),yque.pop(); for(t=0;t<4;t++) { tempx = frontx+dir[t][0]; tempy = fronty+dir[t][1]; if(isOK(tempx,tempy,n,m,used,board)) { used[tempx][tempy] = true; xque.push(tempx),yque.push(tempy); } } } } void solve(vector<vector<char>> &board) { int i,j,n,m; n = board.size(); if(n==0) return; m = board[0].size(); if(m==0) return; vector< vector<bool> > used(n,vector<bool>(m,false)); for(i=0;i<n;i++) { if(board[i][0]=='O'&&used[i][0]==false) bfs(used,board,i,0); if(board[i][m-1]=='O'&&used[i][m-1]==false) bfs(used,board,i,m-1); } for(i=0;i<m;i++) { if(board[0][i]=='O'&&used[0][i]==false) bfs(used,board,0,i); if(board[n-1][i]=='O'&&used[n-1][i]==false) bfs(used,board,n-1,i); } for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(board[i][j]=='O'&&used[i][j]==false) board[i][j]='X'; } } }};
0 0
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Palindrome Number
- 异或运算
- 操作系统之死锁——学习笔记
- 卸干净mysql
- struts2 标签库
- Surrounded Regions
- cas 入门之二十六:person directory(上)
- DVWA之从SQL注入到写入webshell
- hdu 3555 Bomb
- Android中异步类AsyncTask的理解
- c语言练习题(二)
- 写回
- Word Search
- 读取