leetcode:Union Find:Surrounded Regions(130)
2016-08-31 15:16
369 查看
class Solution { public: void process(int i,int j,vector<vector<char> >& board) { int m=board.size(); int n=board[0].size(); typedef pair<int,int> point; queue<point> Q; Q.push(point(i,j)); board[i][j]='E'; while(!Q.empty()) { point tmp=Q.front(); Q.pop(); int x=tmp.first,y=tmp.second; //extending if (x!=0&&board[x-1][y]=='O') { Q.push(point(x-1,y)); board[x-1][y]='E'; //extended; } if (x!=m-1&&board[x+1][y]=='O') { Q.push(point(x+1,y)); board[x+1][y]='E'; //extended; } if (y!=0&&board[x][y-1]=='O') { Q.push(point(x,y-1)); board[x][y-1]='E'; //extended; } if (y!=n-1&&board[x][y+1]=='O') { Q.push(point(x,y+1)); board[x][y+1]='E'; //extended; } } } void solve(vector<vector<char> >& board) { int m=board.size(); if (m==0) return; int n=board[0].size(); int i,j; for(i=0;i<m;i++) { if (board[i][0]=='O') process(i,0,board); if (board[i][n-1]=='O') process(i,n-1,board); } for(j=0;j<n;j++) { if (board[0][j]=='O') process(0,j,board); if (board[m-1][j]=='O') process(m-1,j,board); } for(i=0;i<m;i++) for(j=0;j<n;j++) { if(board[i][j]=='O') board[i][j]='X'; else if (board[i][j]=='E') board[i][j]='O'; } } };
相关文章推荐
- LeetCode Union-Find(并查集) 专题(二)
- [Leetcode]Graph & Union Find
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- 算法归类-union-find(leetcode)
- LeetCode Union-Find(并查集) 专题(一)
- leetcode最优解整理2(Linked list/ Stack/Queue/Array/HashTable/ Tree/bfs/union find)
- LeetCode547. Friends Circles 利用union find | bfs | dfs三种方法解决
- LeetCode Find K Closest Elements
- LeetCode Find the Difference
- 一.快速并查集(Union_Find)
- LeetCode: Find All Duplicates in an Array
- LeetCode Find Peak Element
- leetcode:Maximum Subarray+Find M…
- Princeton Algorithms: Part 1 [week 1:Union Find]
- 并查集(Union-Find) 应用举例 --- 基础篇
- LeetCode-Find the Celebrity
- LeetCode(162) Find Peak Element
- LeetCode "Find Median from Data Stream"
- LeetCode 153 Find Minimum in Rotated Sorted Array
- UVA11987--Almost Union-Find--带权并查集