package com.interview.algorithms.array; /** * Created_By: stefanie * Date: 14-10-19 * Time: 下午5:08 */ public class C4_68_TwoDimensionUnionFind { public static int[][] unionfind(int[][] matrix){ int[][] flag = new int[matrix.length][matrix[0].length]; int counter = 1; for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[0].length; j++){ if(matrix[i][j] == 1){ if(i > 0 && matrix[i-1][j] == 1) { flag[i][j] = flag[i-1][j]; update(matrix, flag, i, j); continue; } if(j > 0 && matrix[i][j-1] == 1) { flag[i][j] = flag[i][j-1]; update(matrix, flag, i, j); continue; } flag[i][j] = counter++; } } } return flag; } private static void update(int[][] matrix, int[][] flag, int i, int j){ if(i > 0 && matrix[i - 1][j] == 1 && flag[i - 1][j] != flag[i][j]){ flag[i-1][j] = flag[i][j]; update(matrix, flag, i - 1, j); } if(j > 0 && matrix[i][j - 1] == 1 && flag[i][j - 1] != flag[i][j]){ flag[i][j - 1] = flag[i][j]; update(matrix, flag, i, j - 1); } } }