题目描述
blablabla
样例
blablabla
算法1
(dfs)
blablabla
时间复杂度
参考文献
Java 代码
package blueBridge.FloodFill;
import java.util.Scanner;
public class acwing643 {
static int[][] rc;
static int R,C;
static boolean visit[][];
static int[] dx = {-1, 0, 1, 0}, dy = {0, -1, 0, 1};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 1; i <= T; i++) {
R = sc.nextInt();
C = sc.nextInt();
rc = new int[R][C];
for (int j = 0; j < R; j++) {
char[] row = sc.next().toCharArray(); // 读取字符串并转换为字符数组
rc[j] = new int[C]; // 初始化当前行的整数数组
for (int k = 0; k < C; k++) {
rc[j][k] = Character.getNumericValue(row[k]); // 将字符转换为相应的数字
}
}
int n = sc.nextInt();
System.out.println("Case #"+i+":");
for (int j = 0; j < n; j++) {
String s = sc.next();
if (s.equals("Q")){
visit = new boolean[R][C];
int count = 0;
for (int z = 0; z < R; z++) {
for (int k = 0; k < C; k++) {
if (!visit[z][k]&&rc[z][k]==1){
count++;
dfs(z,k);
}
}
}
System.out.println(count);
}else {
int x = sc.nextInt();
int y = sc.nextInt();
int k = sc.nextInt();
rc[x][y]= k;
}
}
}
}
static void dfs(int x,int y){
visit[x][y]=true;
for (int i = 0; i < 4; i++) {
int nx = dx[i] + x, ny = dy[i] + y;
if (nx>=0&&nx<R&&ny>=0&&ny<C&&!visit[nx][ny]&&rc[nx][ny]==1){
dfs(nx,ny);
}
}
}
}