Kings可能以最大和从右下角移动到左上角

时间:2019-06-11 14:11:17

标签: java recursion multidimensional-array data-structures chess

我们有一个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;
    }

}

我希望它应该为我提供最大总和的正确路径。

0 个答案:

没有答案