如何创建具有元组值的集合,该值将读取元组中的点

问题描述

我正在矩阵上执行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 (将#修改为@)