将没有任何循环的二维数组的 C++ 递归填充实现转换为 Java?
Translating C++ recursive floodfill implementation for 2D array without any loops, into Java?
我正在尝试翻译不使用任何循环的递归泛洪填充实现。我不断收到堆栈溢出错误,我不确定为什么。我一直在尝试翻译 C++ 代码 here。
如何修复我的 Java 代码翻译?
C++原代码:
// A recursive function to replace previous color 'prevC' at '(x, y)'
// and all surrounding pixels of (x, y) with new color 'newC' and
void floodFillUtil(int screen[][N], int x, int y, int prevC, int newC)
{
// Base cases
if (x < 0 || x >= M || y < 0 || y >= N)
return;
if (screen[x][y] != prevC)
return;
// Replace the color at (x, y)
screen[x][y] = newC;
// Recur for north, east, south and west
floodFillUtil(screen, x+1, y, prevC, newC);
floodFillUtil(screen, x-1, y, prevC, newC);
floodFillUtil(screen, x, y+1, prevC, newC);
floodFillUtil(screen, x, y-1, prevC, newC);
}
我的Java floodFill() 方法:
public void floodFill(int[][] pic, int row, int col, int oldC, int newC) {
// Base Cases
if(row < 0 || col < 0 || row >= pic.length - 1 || col >= pic[row].length - 1) {
return;
}
if(pic[row][col] != oldC) {
return;
}
// recursion
floodFill(pic, row++, col, oldC, newC);
floodFill(pic, row--, col, oldC, newC);
floodFill(pic, row, col++, oldC, newC);
floodFill(pic, row, col--, oldC, newC);
}
我需要在程序中加入行 pic[row][col] = newC
。另一个问题是我不知道 variableName++
是与 variableName + 1
不同的命令,所以递归没有按预期工作。 variableName++
returns variableName
在 递增之前的值。
此代码允许我的程序运行:
public void floodFill(int[][] pic, int row, int col, int oldC, int newC) {
// Base Cases
if(row < 0 || col < 0 || row >= pic.length || col >= pic[row].length) {
return;
}
if(pic[row][col] != oldC) {
return;
}
pic[row][col] = newC;
// recursion
floodFill(pic, row + 1, col, oldC, newC);
floodFill(pic, row - 1, col, oldC, newC);
floodFill(pic, row, col + 1, oldC, newC);
floodFill(pic, row, col - 1, oldC, newC);
}
我正在尝试翻译不使用任何循环的递归泛洪填充实现。我不断收到堆栈溢出错误,我不确定为什么。我一直在尝试翻译 C++ 代码 here。
如何修复我的 Java 代码翻译?
C++原代码:
// A recursive function to replace previous color 'prevC' at '(x, y)'
// and all surrounding pixels of (x, y) with new color 'newC' and
void floodFillUtil(int screen[][N], int x, int y, int prevC, int newC)
{
// Base cases
if (x < 0 || x >= M || y < 0 || y >= N)
return;
if (screen[x][y] != prevC)
return;
// Replace the color at (x, y)
screen[x][y] = newC;
// Recur for north, east, south and west
floodFillUtil(screen, x+1, y, prevC, newC);
floodFillUtil(screen, x-1, y, prevC, newC);
floodFillUtil(screen, x, y+1, prevC, newC);
floodFillUtil(screen, x, y-1, prevC, newC);
}
我的Java floodFill() 方法:
public void floodFill(int[][] pic, int row, int col, int oldC, int newC) {
// Base Cases
if(row < 0 || col < 0 || row >= pic.length - 1 || col >= pic[row].length - 1) {
return;
}
if(pic[row][col] != oldC) {
return;
}
// recursion
floodFill(pic, row++, col, oldC, newC);
floodFill(pic, row--, col, oldC, newC);
floodFill(pic, row, col++, oldC, newC);
floodFill(pic, row, col--, oldC, newC);
}
我需要在程序中加入行 pic[row][col] = newC
。另一个问题是我不知道 variableName++
是与 variableName + 1
不同的命令,所以递归没有按预期工作。 variableName++
returns variableName
在 递增之前的值。
此代码允许我的程序运行:
public void floodFill(int[][] pic, int row, int col, int oldC, int newC) {
// Base Cases
if(row < 0 || col < 0 || row >= pic.length || col >= pic[row].length) {
return;
}
if(pic[row][col] != oldC) {
return;
}
pic[row][col] = newC;
// recursion
floodFill(pic, row + 1, col, oldC, newC);
floodFill(pic, row - 1, col, oldC, newC);
floodFill(pic, row, col + 1, oldC, newC);
floodFill(pic, row, col - 1, oldC, newC);
}