您的位置:首页 > 编程语言 > C语言/C++

海岛个数问题LintCode

2017-05-09 22:40 453 查看

笔试编程题

问题描述:

给一个01矩阵,求不同的岛屿的个数。

0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。

样例

在矩阵:

[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]


总共有3个海岛。

求解:采用深搜(DFS)策略:

遍历过的元素置为false;

void  DFS(vector<vector<bool>>& grid,int i,int j){
grid[i][j] = 0;
if(i>0&&grid[i-1][j])
DFS(grid,i-1,j);
if(j>0&&grid[i][j-1])
DFS(grid,i,j-1);
if(i<grid.size()-1 && grid[i+1][j])
DFS(grid,i+1,j);
if(j<grid[0].size()-1 && grid[i][j+1])
DFS(grid,i,j+1);
}
int numIslands(vector<vector<bool>>& grid) {
int count = 0;
for(int i = 0;i<grid.size();i++){
for(int j = 0;j<grid[0].size();j++){
if(grid[i][j]) {
DFS(grid,i,j);
count++;
}
}
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 dfs C++