在击中2D阵列中的每个点时从点A到B的最小移动次数

时间:2013-04-01 07:40:01

标签: java multidimensional-array shortest-path

如果我有一个二维数组,一个原点和一个目的地(所有类型为int),我怎样才能找到从原点到达目的地的最小移动次数,同时命中路上的每个点?每次移动都会有一个计数器增量,然后返回计数器。

int array[][]   = {{0, 1},{2, 1},{1, 3}};
int origin      = 0;
int destination = 3;

例如,这个2D数组会产生

    0  --------- 1 ----------  3
                 |
                 |
                 |
                 2 

预期输出为4,因为你去了0-1,1-2,2-1,1-3。

我试图实现像Floyd-Warshall和Dijkstra算法这样的算法,但是它们不能用于我想做的事情。

更新

这是我的方法。它更复杂,但我决定基本上从头开始。

public static int minMoves(int[][] array, int origin, int destination) {

    int counter = 0;

    for(int x = 0; x < array.length; x++){

        for(int y = 0; y < array[0].length; y++){

            if(array[x][y] != destination){
                counter++;
            }

            else if(roads[x][y] == destination){
                break;
            }
        }
    }

            return counter;
}

这显然不能给我正确的结果。举个例子,我给早先的计数器结果是5。

更新 我认为解决这个问题的更好方法是将2D数组转换为某种树。有什么建议吗?

0 个答案:

没有答案