问题描述
我正在矩阵上执行BFS,并使用Set来保存我之前看到的值。我用值行和列创建了Tuple类。我遇到的问题是,看到的Set将在矩阵上添加重复的点,因为它是具有相同点的另一个Tuple对象。我以前只是通过递归解决了这个问题,但是我对玩堆栈和队列来解决此类问题更感兴趣。我不确定是否必须遍历每个元组,但这听起来时间效率很低。下面的代码确实可以运行,但是我试图通过不必添加不必要的点来优化解决方案。任何建议将不胜感激。这是洪水填充问题https://leetcode.com/problems/flood-fill/
public int[][] floodFillQueue(int[][] array,int startRow,int startColumn,int newColor){
Queue<Tuple> queue = new LinkedList<>();
Set<Tuple> seen = new HashSet<>();
Tuple startPoint = new Tuple(startRow,startColumn);
queue.add(startPoint);
int startColor = array[startRow][startColumn];
while(!queue.isEmpty()){
Tuple current = queue.poll();
if(array[current.row][current.column] == startColor){
array[current.row][current.column] = newColor;
}
List<Tuple> neighbors = findNeighbors(array,current);
for(int i = 0; i < neighbors.size(); i++){
if(array[neighbors.get(i).row][neighbors.get(i).column] == startColor && !seen.contains(neighbors.get(i))){
queue.add(neighbors.get(i));
}
}
}
return array;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)