类似于地图识别的数组相关的算法
示例:
随机生成一个二维数组,内容如下
1 1 0 1 1 1
1 0 1 1 1 1
1 1 0 0 0 1
1 0 1 1 1 1
1 1 0 1 0 0
1 0 1 0 1 0
1 0 1 1 1 1
1 1 0 0 0 1
1 0 1 1 1 1
1 1 0 1 0 0
1 0 1 0 1 0
相互邻接的“1”组成的簇为一个大块,未邻接“1”的独立单元为一个小块
求单元组成的块的总数
答案为:
区块数:4
区块数:4
算法核心类BlockCounter.java
/**
* 数组区块数量判断:
* 1.给出一个二维数组,数组内容值为(0或1);
* 2.值为1的连续区块识别为一块,单独的独立区块也识别为一块;
* 3.判断得到的块的数量(类似于地图判断房屋数量).
* @author Verils
*/
public class BlockCounter {
private static final int SOMETHING = 1;
private static final int NOTHING = 0;
private int[][] grid;
private int rows;
private int cols;
private boolean defaultReset = false;
public BlockCounter(int[][] arr) {
grid = arr;
rows = grid.length;
cols = grid[0].length;
}
public boolean hasSomething(int i, int j) {
return grid[i][j] == SOMETHING;
}
public boolean isAlone(int i, int j) {
if (i == 0 && j == 0) {
return grid[i + 1][j] == NOTHING && grid