问题描述:
> 一个矩阵中只有0和1两种值,每一个位置都可以和自己的上下左右四个方向相连,如果有一片1连在一起,这个部分叫做岛,求一个矩阵有多少个岛?
代码实现:
public static int countIslands(int [][]m){
if(m==null||m[0]==null){
return 0;
}
int N = m.length;//行
int M = m[0].length;//列
int res = 0;
for(int i = 0;i < N;i++){
for(int j = 0;j < M;j++){
if(m[i][j]==1){
res++;
infect(m,i,j,N,M);
}
}
}
return res;
}
public static void infect(int [][]m,int i,int j,int N,int M){
if(i < 0||i>=N||j < 0||j>=M||m[i][j]!=1){
return ;
}
m[i][j] = 2;
infect(m,i + 1,j,N,M);
infect(m,i - 1,j,N,M);
infect(m,i,j - 1,N,M);
infect(m,i,j + 1,N,M);
}
关于岛的进阶问题,“用并行分析大地图”,会在下一个博客中介绍