11、有序表、并查集、KMP

岛问题

一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右 四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?
【举例】
001010
111010
100100
000000
这个矩阵中有三个岛

package tisheng.class01;

public class Code03_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;
	}

	//连成片的1传递下去,并且变成2
	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;
		}
		//i j没越界并且当前位置值是1
		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

你可能感兴趣的:(左神算法,开发语言)