以递归方式计算2d数组中的组大小

时间:2016-04-15 14:10:12

标签: java

我试图从输入点计算总组数。用户将输入一个点(行,列)和一个组,如:

__XX
__X_

将返回3,因为它有3个X' s。所以我几乎已经想到了这一点,但我的问题是它在某些情况下不计算某些X.例如:

_XX
XXX

如果我在最左边的X左边调用这个方法,那么它将返回4(它不会计算最左下角的X,但是如果我在左下角调用它,则最多X将返回5另一个例子:

__XX
__XX
__XX
__XX
___X
__X_

现在,这应该返回9,因为第10个X与其他X对角线并且不会被包括在内。

这是我的方法:

public int sizeGroup(int row, int col) {
    if (!board[row][col]) {
        // the point entered is not at a valid group
        return counter;
    } else if (first) {
        rowInitial = row;
        colInitial = col;
        first = false;
        return sizeGroup(row, col);
    } else {
        if (!visited[row][col]) {
            counter++;
        }
        visited[row][col] = true;

        if (row < board.length - 1 && board[row + 1][col] && !visited[row + 1][col]) {
            return sizeGroup(row + 1, col);
        } else if (row > 0 && board[row - 1][col] && !visited[row - 1][col]) {
            return sizeGroup(row - 1, col);
        } else if (col < board[0].length - 1 && board[row][col + 1] && !visited[row][col + 1]) {
            return sizeGroup(row, col + 1);
        } else if (col > 0 && board[row][col - 1] && !visited[row][col - 1]) {
            return sizeGroup(row, col - 1);
        } else if (isVisitedAround(row,col)) {
            return sizeGroup(rowInitial, colInitial);
        }
        return counter;
    }
}
private boolean isVisitedAround(int row, int col) {
    if (row < board.length - 1 && visited[row + 1][col] && row > 0 && visited[row - 1][col]
            && col < board[0].length - 1 && visited[row][col + 1] && col > 0 && visited[row][col + 1]) {
        return true;
    } else {
        return false;
    }

0 个答案:

没有答案