Java коллекция коллекционных монет из большой соседней ячейки - PullRequest
0 голосов
/ 10 марта 2019

Моя проблема заключается в следующем:

У меня есть двумерный массив размером n x m, введенный в одну строку. В следующих n строках содержится m элементов, которые заполняют массив. Все идет нормально.

На поле есть пешка, которая всегда начинается с единственного 0 на поле (при условии, что всегда есть один 0). Он может двигаться вверх и вниз, вправо и влево. Он всегда перемещается в соседнюю ячейку с наибольшим количеством монет и на каждом ходу собирает 1 монету (=> очищает посещенную ячейку на 1). Пешка делает это до тех пор, пока вокруг нее только 0, и она больше ничего не может собрать. Мне нужно найти сумму всех собранных монет.

Вот представление первых шагов в Paint:

Первые шаги коллекции монет:

enter image description here

Пример ввода: 4 3, 3 2 4, 2 0 3, 1 1 5, 2 2 5 -> выход: 22 * ​​1016 *

Вот мой код: У меня есть незавершенная работа с targetCell (мне все еще интересно, как динамически получить его координаты в цикле, чтобы каждая ячейка с большим значением, чем у предыдущего, превращалась в targetCell.) Также я застрял с использованием только что указанных направлений. создано. Любые намеки были бы полезны для дальнейшей разработки задачи.

    Scanner scanner = new Scanner(System.in);

    String input = scanner.nextLine();
    String[] my_array = input.split(" ");
    int[] array = Arrays.stream(my_array).mapToInt(Integer::parseInt).toArray();
    int n = array[0]; // rows of matrix
    int m = array[1]; // cols of matrix

    int[][] matrix = new int[n][m];

    for (int i = 0; i < n; i++) {
        String line = scanner.nextLine();
        String[] numbers = line.split(" ");
        matrix[i] = new int[m];
        for (int j = 0; j < m; j++) {
            matrix[i][j] = Integer.parseInt(numbers[j]);
        }
    }

    int startPoint = 0;
    int currentRow = 0;
    int currentCol = 0;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (matrix[i][j] == 0) {
                startPoint = matrix[i][j];
                currentRow = i;
                currentCol = j;
            }
        }
    }

    int target1 = 0;
    int target2 = 0;
    int targetCell = 0;

            target1 = Math.max(matrix[currentRow - 1][currentCol], matrix[currentRow + 1][currentCol]);
            target2 = Math.max(matrix[currentRow][currentCol - 1], matrix[currentRow][currentCol + 1]);
            targetCell = Math.max(target1, target2);
            System.out.println(targetCell);

            int hDirection = 1;
            if (targetCol < currentCol) {
                hDirection = -1;
            }
            int vDirection = 1;
            if (targetRow < currentRow) {
                vDirection = -1;
            }
        }
    }
}

1 Ответ

0 голосов
/ 11 марта 2019

(Не могу комментировать, поэтому пока буду использовать ответ. Извините)

Моей первой мыслью было бы сохранить глобальную переменную для прогона, чтобы при сборе монеты она добавлялась к ее текущему значению; похоже на то, как вы ведете счет в таких играх, как тетрис. Это при условии, что я правильно прочитал.

Так что-то вроде:

private static int current_score = 0; //Assuming no use of objects so using static

Не удалось понять пример ввода в этом примере. Если бы вы могли представить сценарий из трех ходов, каким будет окончательный счет, я мог бы дать вам лучшее понимание.

...