-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNumberOfIslands.java
More file actions
executable file
·56 lines (51 loc) · 1.5 KB
/
Copy pathNumberOfIslands.java
File metadata and controls
executable file
·56 lines (51 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package dfs_bfs;
/**
* @Author: Mr.Z
* @DateTime: 2021/01/30 21:37
* @Description: 200. 岛屿数量 https://leetcode-cn.com/problems/number-of-islands/
**/
public class NumberOfIslands {
int[] dx = { -1, 1, 0, 0 };
int[] dy = { 0, 0, -1, 1 };
char[][] g;
public int numIslands(char[][] grid) {
int count = 0;
g = grid;
for (int i = 0; i < g.length; i++) {
for (int j = 0; j < g[i].length; j++) {
count += dfs(i, j);
}
}
return count;
}
private int dfs(int i, int j) {
if (i < 0 || i == g.length || j < 0 || j == g[i].length || g[i][j] == '0')
return 0;
// 将陆地'1'标记为'0'
g[i][j] = '0';
for (int k = 0; k < dx.length; k++) {
// 访问上、下、左、右四个相邻结点
int x = i + dx[k], y = j + dy[k];
dfs(x, y);
}
return 1;
}
public int numIslands2(char[][] grid) {
int islands = 0;
g = grid;
for (int i = 0; i < g.length; i++)
for (int j = 0; j < g[i].length; j++)
islands += sink(i, j);
return islands;
}
int sink(int i, int j) {
if (i < 0 || i == g.length || j < 0 || j == g[i].length || g[i][j] == '0')
return 0;
g[i][j] = '0';
sink(i + 1, j);
sink(i - 1, j);
sink(i, j + 1);
sink(i, j - 1);
return 1;
}
}