我试图从输入点计算总组数。用户将输入一个点(行,列)和一个组,如:
__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;
}