public class Main{
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.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);//当深搜完成,说明当前字符所在的八连块全部被修改为*,应该块的计数+1,并寻找下一个@
++cnt;
}
}
}
System.out.println(cnt);
}
}
图八连通检测
最新推荐文章于 2024-03-17 14:20:32 发布