lintcode-677. Number of Big Islands
2017-12-26 22:50
1261 查看
题目比较简单,搜索整个二维数组,当找到一个布尔值为1 的点时,使用深度优先搜索确定以这个点为发起点的islands 数量,然后和指定的k进行比较,满足则递增计数值。C++代码如下:
struct T
{
int i;
int j;
T(){}
T(int ii,int jj):i(ii),j(jj)
{
}
};
class Solution {
public:
/*
* @param : a 2d boolean array
* @param : an integer
* @return: the number of Islands
*/
T pos[4];
stack<T> s;
bool round(vector<vector<bool>>&v,const T &t){
v[t.i][t.j]=false;
bool flag=false;
for(int i=0;i<4;++i){
int m=t.i+pos[i].i;
int n=t.j+pos[i].j;
if(m>=0&&m<v.size()&&n>=0&&n<v[0].size()&&v[m]
){
s.push(T(m,n));
v[m]
=false;
flag=true;
}
}
return flag;
}
int numsofIsland(vector<vector<bool>> grid, int k) {
// Write your code here
int kk=0;
pos[0]=T(-1,0);
pos[1]=T(1,0);
pos[2]=T(0,-1);
pos[3]=T(0,1);
for(int i=0;i<grid.size();++i){
for(int j=0;j<grid[0].size();++j){
int kkk=0;
if(grid[i][j]&&round(grid,T(i,j))){
++kkk;
while(!s.empty()){
++kkk;
T t=s.top();
s.pop();
round(grid,T(t.i,t.j));
}
if(kkk>=k)
++kk;
}
}
}
return kk;
}
};
相关文章推荐
- LintCode python 小白4-Big Integer Addition
- Google/LintCode:E-Big Integer Addition
- LintCode "Number of Islands II"
- LintCode 433: Number of Islands
- lintcode 搜索二维矩阵
- LintCodet题目
- lintcode --翻转字符串
- lintcode 合并区间
- Lintcode——排序专题总结
- LintCode-排序列表转换为二分查找树
- LintCode 433. Number of Islands
- lintcode ----删除排序数组中的重复数字
- Lintcode8——旋转字符串
- LintCode 57. 3Sum
- LintCode Wood Cut java solution
- lintcode/leetcode由易至难第15题:Merge Two Binary Trees
- LintCode 5. Kth Largest Element
- lintCode. 792 Kth Prime Number
- LintCode Binary Tree Longest Consecution Sequence
- Lintcode---克隆二叉树