我们有一个m n矩阵King在m n位置,他必须到达0 * 0位置。他可以向左,向上和对角线(左侧)移动。在每一步都有一些值定义,我们必须找到具有最大和的路径,即从m * n到0 * 0。
Example:
D 1 2
2 3 4
1 2 S
Output: S 4 3 2 D as the sum of steps is max (4+3+2)
我搜索并尝试了多种解决方案,但未获得正确答案。在某些情况下会失败。目前,我正在查找所有可能的路径,并获取所有可用路径的总和,然后找到最大值。 在下面找到我的代码:
public class KingMarch {
static List<String> re = new ArrayList<>();
static List<Integer> result = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String arr[][] = new String[n][n];
sc.nextLine();
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
arr[j][k] = sc.next();
}
sc.nextLine();
}
int len = arr.length;
recursion(len - 1, len - 1, arr, 0);
System.out.println("max = " + getMax(result));
}
private static void recursion(int i, int j, String[][] arr, int idx) {
if (i == -1 || j == -1)
return;
if (!arr[i][j].equalsIgnoreCase("S") && !arr[i][j].equalsIgnoreCase("D")) {
re.add(arr[i][j]);
}
if (arr[i][j].equalsIgnoreCase("D")) {
result.add(sum(re));
printPath(re);
re.clear();
}
recursion(i, j - 1, arr, idx + 1); // left
recursion(i - 1, j - 1, arr, idx + 1); // diag
recursion(i - 1, j, arr, idx + 1); // top
}
private static void printPath(List<String> re) {
System.out.println("----NEW---");
for (String i : re) {
System.out.print(i + ", ");
}
}
private static int getMax(List<Integer> result) {
int max = 0;
for (int i : result) {
if (i > max)
max = i;
}
return max;
}
private static int sum(List<String> re) {
int sum = 0;
for (String i : re) {
sum += Integer.parseInt(i);
}
return sum;
}
}
我希望它应该为我提供最大总和的正确路径。