题目:找出n*n矩阵中的连块(1表示黑色,0表示白色)。如果两个黑格子有公共边或者公共顶点则属于同一个八连快
代码:package diliuzhang;
import java.util.Scanner;
public class BaLianKuanDFS {
static int[][] visit=new int[50][50];
static int[][] mat=new int[50][50];
public static void main(String[] agrs){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for (int i = 0; i <n; i++) {
for (int j = 0; j <n; j++) {
mat[i+1][j+1]=in.nextInt();
}
}
int count=0;
for (int i = 1; i <=n; i++) {
for (int j = 1; j <=n; j++) {
if (visit[i][j]==0&&mat[i][j]!=0) {
count++;
dfs(i,j);
}
}
}
System.out.println(count);
}
private static void dfs(int i, int j) {
// TODO Auto-generated method stub
if (mat[i][j]==0||visit[i][j]!=0) {
return;
}
visit[i][j]=1;
dfs(i-1, j-1);
dfs(i-1, j);
dfs(i-1, j+1);
dfs( i-1, j);
dfs(i, j+1);
dfs(i+1, j-1);
dfs(i+1, j);
dfs(i+1, j+1);
}
}
本文介绍了一种使用深度优先搜索(DFS)算法解决n*n矩阵中连块问题的方法,连块由相邻的黑色单元格组成。通过遍历矩阵并标记已访问的单元格,程序能够准确地计算出矩阵中连块的数量。
699

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



