我有这个任务,我需要在给定的二维数组中找到最便宜的路线。假设您是一辆从阵列左下角开始的汽车,并且需要在右上角到达目的地,但是您只能向北和向东行驶。我需要写一个递归方法
1。应显示将使您花费最少通行费的路线。
2.显示该路线上每个通行费所支付的金额,如何到达目的地的指示以及总费用。这是示例输出:
Finding the Cheapest Routes:
Grid #1:
12 3 15 8 21
10 2 10 13 9
11 8 19 17 3
Cheapest Route: 11 8 2 3 15 8 21
Direction: EAST NORTH NORTH EAST EAST EAST
Cheapest Cost: $68
Grid #2:
10 2
15 9
Cheapest Route: 15 9 2
Direction: EAST NORTH
Cheapest Cost: $26
Program is Complete
我已经阅读了网格并在我的主要方法中拥有了这些变量,(已经指定了BTW gridRows和gridColumns并进行了读入(例如,对于第一个网格,gridRows为3,gridColumns为5)
int posX = gridRows -1; // keeps track of the x-coord of the position
int posY= 0; // keeps track of the y-coord of the position
int destPosX = gridColumns-1; //both these variables are the destination of routeFinder
int destPosY = 0;
int dist = 0;
int minDist = routeFinder(route, posX, posY, Integer.MAX_VALUE, dist, destPosX, destPosY);
我正在努力构建一种可行的递归方法,这就是我到目前为止所掌握的方法,我一直坚持如何保存路径以及如何打印方向。
public static int routeFinder (int[][] route, int posX, int posY, int minDist, int dist, int destPosX, int destPosY){
//if posX & posY reach the destination
if(posX == destPosX && posY == destPosY) {
return Integer.min(dist,minDist);
}
//move North
if(posX -1 >= 0 && posY < route[0].length) {
minDist = routeFinder(route, posX - 1, posY, minDist, dist + 1, destPosX, destPosY);
}
//move East
if(posX >= 0 && posY +1 < route[0].length) {
minDist = routeFinder(route, posX, posY + 1, minDist, dist + 1, destPosY, destPosY);
}
return minDist;
}
我被困住了,我不知道如何从这里继续...我需要首先找到一种方法来找到所有可能的路线,然后找到一种方法来跟踪最便宜的路线。.任何帮助都会不胜感激。