每日一题:二维网格图中探测环

题目

问二维矩阵中是否存在相同字母构成的环。

Solution

判环问题,显然可以想到并查集。遍历矩阵,若该点与之前遍历过的相邻点字符相同且是同一个根的话,说明存在环,否则合并这两个点。

Code

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
class Solution {
static int[] pre = new int[500005];

public int find(int x) {
return pre[x] == x ? x : (pre[x] = find(pre[x]));
}

public boolean join(int x, int y) {
int fx = find(x), fy = find(y);
if (fx == fy) return true;
pre[fx] = fy;
return false;
}

public boolean containsCycle(char[][] grid) {
int n = grid.length, m = grid[0].length;
for (int i = 0; i < n * m; i++)
pre[i] = i;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i > 0 && grid[i][j] == grid[i - 1][j] && join(i * m + j, (i - 1) * m + j)) {
return true;
}
if (j > 0 && grid[i][j] == grid[i][j - 1] && join(i * m + j, i * m + j - 1)) {
return true;
}
}
}
return false;
}
}
作者

Benboby

发布于

2020-08-25

更新于

2021-01-28

许可协议

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×