Java 这个洪水填充算法有什么问题?
给定一个图片数组,代码应该返回分隔区域的数量和最大区域的大小 颜色表示为整数(0表示白色。白色区域不计数) m和n分别是行和列的# 比如说,Java 这个洪水填充算法有什么问题?,java,algorithm,recursion,flood-fill,Java,Algorithm,Recursion,Flood Fill,给定一个图片数组,代码应该返回分隔区域的数量和最大区域的大小 颜色表示为整数(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; pub
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);
}
public int max=0;
公共int[]解决方案(int m、int n、int[][]图片){
//答案[0]=区域编号
//答案[1]=maxSizeOfOneArea
int[]答案=新的int[2];
for(int i=0;i答案[1]),答案[1]=最大值;
回答[0]++;
}
}
}
返回答案;
}
公共空隙漫灌(int i、int j、int num、int[][]图片){
如果(i<0 | | j<0 | | i>=picture.length | | j>=picture[0]。length | | picture[i][j]!=num)
返回;
max++;
图片[i][j]=0;
洪水填充(i-1,j,数量,图片);
洪水填充(i+1,j,数量,图片);
洪水填充(i,j-1,数量,图片);
洪水填充(i,j+1,数量,图片);
}
我尝试了多个测试用例,它通过了所有测试,但当我提交时失败了
我遗漏了哪些边缘案例?您发布的链接似乎位于注册过程的后面。你能解释一下这项任务吗?如果它有图片可以帮助理解问题,你能把它们添加到这里吗?很抱歉,我更改了链接。你知道为什么它失败了吗?暂停?错误的结果?有没有可能出现堆栈溢出错误?您是否尝试过一个100×100的样本,所有样本都填充了一个?是的,堆栈或队列(因为顺序不重要)应该可以。