Java泛洪填充问题堆栈溢出错误
我正在尝试使用java实现4路洪水填充问题。Java泛洪填充问题堆栈溢出错误,java,arrays,algorithm,recursion,Java,Arrays,Algorithm,Recursion,我正在尝试使用java实现4路洪水填充问题。 问题: 我有这个矩阵 12 12 2 1 2 现在,我将选择该矩阵的元素(0,1),并对其应用泛洪填充问题,以将满足递归条件的所有2更改为3 我的最终矩阵应该是: 13 1 13 2 1 3 我已经为相同的代码编写了java代码,但它给了我StackOverflow错误。 谁能帮我想一想如何避免它 这是我的密码: import java.util.*; public class abc { static void printarray(int a
问题: 我有这个矩阵 12
12
2 1 2 现在,我将选择该矩阵的元素(0,1),并对其应用泛洪填充问题,以将满足递归条件的所有2更改为3 我的最终矩阵应该是: 13 1
13
2 1 3 我已经为相同的代码编写了java代码,但它给了我StackOverflow错误。 谁能帮我想一想如何避免它 这是我的密码:
import java.util.*;
public class abc {
static void printarray(int a[][])
{
for ( int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
System.out.print(a[i][j]+ " ");
}
System.out.println();
}
}
static void flood(int arr[][],int x,int y) {
//base cases
if (x < 0 || x >= 3 || y < 0 || y >= 3||arr[x][y] == 1) {
return;
}
// i have made a dimension specific function but i can generalize it !.
arr[x][y] = 3;
flood(arr,x-1,y);
flood(arr,x,y-1);
flood(arr,x,y+1);
flood(arr,x+1,y);
}
public static void main(String[] args) {
int screen[][] = {
{1, 2, 1},
{1, 2,2},
{2,1,2}
};
flood(screen,0,1);
printarray(screen);
}
您的问题在这一行:
flood(arr,x-1,y);
flood(arr,x,y-1);
flood(arr,x,y+1);
flood(arr,x+1,y);
在深度优先搜索中,无条件探索当前单元格的所有4个方向,当搜索在相同的两个平铺之间切换时,在某个地方会创建一个无限递归循环。也要解决这个问题
- 跟踪已探测的单元,不要重新访问它们
- 执行广度优先搜索,而不是DFS
- 进行迭代深化的深度优先搜索
if (x < 0 || x >= 3 || y < 0 || y >= 3||arr[x][y] == 1) {
return;
}
if (x < 0 || x >= 3 || y < 0 || y >= 3||arr[x][y] == 1) {
return;
}
if (x < 0 || x >= 3 || y < 0 || y >= 3||arr[x][y] != 2) {
return;
}