Java 在二维阵列中寻找最小邻居

Java 在二维阵列中寻找最小邻居,java,multidimensional-array,Java,Multidimensional Array,我有一些代码,可以找到2D数组中8个相邻单元格中最小的一个。当此代码运行时,最小的代码将移动到,代码将在循环中再次运行。但是,当它运行时,代码最终会给出堆栈溢出错误,因为它会在两点之间不断跳转。这似乎是一个逻辑悖论,好像Y

我有一些代码,可以找到2D数组中8个相邻单元格中最小的一个。当此代码运行时,最小的代码将移动到,代码将在循环中再次运行。但是,当它运行时,代码最终会给出堆栈溢出错误,因为它会在两点之间不断跳转。这似乎是一个逻辑悖论,好像Y
private Point findLowestWeight(Point current) {
    float lowest = Float.MAX_VALUE;
    Point ret = new Point(-1, -1);
    LinkedList<Point> pointList = new LinkedList<Point>();
    for (int i = -1; i <= 1; i++) {
        for (int j = -1; j <= 1; j++) {
            if (!(i == 0 && j == 0)) {
                if ((current.x + i >= 0 && current.x + i <= imageX - 2) 
                 && (current.y + j >= 0 && current.y + j <= imageY - 2)) {
                    pointList.add(new Point(current.x + i, current.y + j));
                }
            }
        }
    }
    for (Point p : pointList){
        if (map[p.x][p.y] < lowest){
            lowest = map[p.x][p.y];
            ret = p;
        }
    }
    return ret;
}

你需要一个停车箱

在二维数组中查找8个相邻单元格中的最小单元格。当此代码运行时,最小的代码将移动到,并且代码将在循环中再次运行

这是一个很好的开始方式,但没有提到停止

您是否关心当前单元格的值?如果是这样,你需要选择9而不是8。若你们只是想下山,那个么你们需要检查一下你们去过哪里,否则任何平坦的多胞谷都会让你们陷入无限循环。只考虑移动向下移动。< /P>
如果你真的不在乎你在哪里,那么即使是一个单一的细胞谷也会让你陷入一个无限的循环,因为你会在其中来回跳跃。在这种情况下,您需要其他一些停止条件。考虑IVEXEX-IMAGE迭代后的停止。

即使最小的邻居大于中心的值,你也会移动吗? 例如:

从中心单元格0开始。最小的邻居是1。如果移动到1,最小的邻居是0。你可以继续下去。
如果最小的相邻单元格大于当前单元格,您可能不应该移动。

imageX和imageY的确切用途是什么?如果您搜索相邻单元格并排除中心,则始终会进行交换。您应该将lower与map[current.x][current.y]进行比较,看看是否确实需要交换点。imageX和imageY是数组的宽度和高度,由于数据的结构方式,每个点的值总是较低的,除了一种特殊情况,即此代码永远不会在BTW上运行。堆栈溢出错误提示某些递归代码。它不在这个例子中,所以可能是在调用这个方法的东西中?啊,谢谢,这段代码是从递归函数调用的,在stopping子句中有一个输入错误
2 2 2 2
2 0 1 2
2 2 2 2