问题描述:
一个只包含0和1的阵列,找到1的组的个数,每个组的定义是横向和纵向相邻的值都为1,如图中一共有4个组,用不同颜色的框分割(可以参见不同粗细勾画起来的框)。
package test;public class Islands {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);}public static void main(String[] args) {int[][] m1 = { { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 0, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 0, 0, 1, 0 },{ 0, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 0, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, };System.out.println(countIslands(m1));int[][] m2 = { { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 0, 0, 1, 0 },{ 0, 1, 1, 0, 0, 0, 1, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 0, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, };System.out.println(countIslands(m2));} }