岛屿数量
给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入: 11110 11010 11000 00000 输出: 1
示例 2:
输入: 11000 11000 00100 00011 输出: 3
做法:根据每个岛屿点的上下左右来建立图,然后直接DFS看有多少个区域。
class Solution {
public int map[][] = new int[99999][5];
public int vec[] = new int[99999];
public int msize = 0;
public int numIslands(char[][] grid) {
int height = grid.length;
if(height == 0){
return 0;
}else{
int width = grid[0].length;
List<Integer> vecs = new ArrayList<Integer>();
for(int i=0; i<height; i++){
for(int j=0; j<width; j++){
if(grid[i][j] == '1'){
vecs.add(i*width + j);
}
}
}
for(int i=0; i<vecs.size(); i++){
int current_pos = vecs.get(i);
if((current_pos+1)%width == 0){
for(int j=0; j<vecs.size(); j++){
if(vecs.get(j) == current_pos + width){
map[i][map[i][4]] = j;
map[j][map[j][4]] = i;
map[i][4] += 1;
map[j][4] += 1;
}
}
}else{
for(int j=0; j<vecs.size(); j++){
if(vecs.get(j) == current_pos+width || vecs.get(j) == current_pos + 1){
map[i][map[i][4]] = j;
map[j][map[j][4]] = i;
map[i][4] += 1;
map[j][4] += 1;
}
}
}
}
msize = vecs.size();
int islands = 0;
for(int i=0; i < msize; i++){
if(vec[i] == 0){
islands += 1;
dfs(i);
}
}
return islands;
}
}
public void dfs(int current){
if(vec[current] == 0){
vec[current] = 1;
for(int i=0; i<map[current][4]; i++){
dfs(map[current][i]);
}
}else{
return;
}
}
}