天天看点

程序员代码面试指南刷题--第六章.岛问题

给定一个二维数组,其中只有0,1。每个位置都与其上下相邻,如果是一堆1连成一片,那就称为岛。返回岛的数量。

解法一

public 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 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);
    }