您的位置:首页 > 其它

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