输入一个n*n的黑白图像,统计其中黑色八连块的个数,0代表白,1代表黑。
样例输入:
6
1 0 0 1 0 0
0 0 1 0 1 0
0 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
0 1 0 1 0 0
样例输出:
3
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void dfs(int [][]arr,int [][]visited,int x,int y){
if(arr[x][y]==0||visited[x][y]==1)
return;
visited[x][y]=1;
dfs(arr,visited,x,y-1);
dfs(arr,visited,x,y+1);
dfs(arr,visited,x-1,y-1);
dfs(arr,visited,x-1,y);
dfs(arr,visited,x-1,y+1);
dfs(arr,visited,x+1,y-1);
dfs(arr,visited,x+1,y);
dfs(arr,visited,x+1,y+1);
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
int n=scanner.nextInt();
int [][]arr=new int[n+2][n+2];
int [][]visited=new int[n+2][n+2];
for(int i=0;i<n+2;i++){
Arrays.fill(visited[i], 0);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
arr[i][j]=scanner.nextInt();
}
for(int i=0;i<n+2;i++){ //加一个全为0的外圈,防止越界
arr[0][i]=0;
arr[n+1][i]=0;
}
for(int i=0;i<n+2;i++){
arr[i][0]=0;
arr[i][n+1]=0;
}
int count=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(arr[i][j]==1&&visited[i][j]==0){
count++;
dfs(arr,visited,i,j);
}
}
}
System.out.println(count);
}
scanner.close();
}
这篇博客主要介绍如何使用Java编程解决黑白图像中黑色八连通块的计数问题。通过输入一个n*n的二维矩阵表示图像,程序会统计并输出其中黑色像素相连形成的八连通块的数量。样例输入和输出展示了具体的应用场景。
679

被折叠的 条评论
为什么被折叠?



