グラフのDfs_FloodFill
- m行n列の文字マトリックスを入力し、文字「@」で構成される8つのブロックの数を数えます。
- 2文字の「@」のグリッドが隣接している場合(水平、垂直、または斜め)、それらは同じ8つの接続されたブロックに属していると言われます。
- 分析:グラフのdfs
public class 图的dfs_FloodFill {
private static char[][] data = {
"*@@*@".toCharArray(),
"**@*@".toCharArray(),
"****@".toCharArray(),
"@@@*@".toCharArray(),
"@@**@".toCharArray(),
};
private static int cnt;
private static void dfs(int r, int c) {
if (r < 0 || r >= data.length || c < 0 || c >= data[0].length) return;
if (data[r][c] == '*') return;
data[r][c] = '*';
dfs(r + 1, c);
dfs(r - 1, c);
dfs(r, c + 1);
dfs(r, c - 1);
dfs(r + 1, c + 1);
dfs(r + 1, c - 1);
dfs(r - 1, c - 1);
dfs(r - 1, c + 1);
}
public static void main(String[] args) {
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {
if (data[i][j] == '@') {
dfs(i, j);
++cnt;
}
}
}
System.out.println(cnt);
}
}