如果我有一个二维数组,一个原点和一个目的地(所有类型为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数组转换为某种树。有什么建议吗?