这种洪水填充算法有什么问题?

时间:2017-08-28 08:00:02

标签: java algorithm recursion flood-fill

https://www.kakaocode.com/tryouts/1353/intro

给定一个图片数组,代码应该返回分隔区域的数量和最大区域的大小。

颜色表示为整数(0表示白色。白色区域不计算)。

m和n分别是行数和列数。

例如,

m = 6, n = 4 
1 1 1 0
1 2 2 0
1 0 0 1
0 0 0 1
0 0 0 3
0 0 0 3

应该返回[4, 5],因为有4个单独的区域,最大的区域包含5个。

另一个例子:

1 1 1 0
1 1 1 0
0 0 0 1
0 0 0 1
0 0 0 1

这个应该返回[2, 6]

public int max = 0;
public int[] solution(int m, int n, int[][] picture) {
    // answer[0] = numberOfArea
    // answer[1] = maxSizeOfOneArea
    int[] answer = new int[2];

    for (int i = 0; i < m; i++){
        for (int j = 0; j < n; j++){
            if (picture[i][j] != 0){
                max = 0;
                floodFill(i, j, picture[i][j], picture);
                if (max > answer[1])   answer[1] = max;
                answer[0]++;
            }
        }
    }
    return answer;
}

public void floodFill(int i, int j, int num, int[][] picture){
    if (i < 0 || j < 0 || i >= picture.length || j >= picture[0].length || picture[i][j] != num)
        return;
    max++;
    picture[i][j] = 0;
    floodFill(i - 1, j, num, picture);
    floodFill(i + 1, j, num, picture);
    floodFill(i, j - 1, num, picture);
    floodFill(i, j + 1, num, picture);
}

我尝试了多个测试用例并且全部通过,但是当我提交时失败了。

我遗失了哪些边缘案例?

0 个答案:

没有答案