Моя проблема заключается в следующем:
У меня есть двумерный массив размером n x m, введенный в одну строку. В следующих n строках содержится m элементов, которые заполняют массив. Все идет нормально.
На поле есть пешка, которая всегда начинается с единственного 0 на поле (при условии, что всегда есть один 0).
Он может двигаться вверх и вниз, вправо и влево. Он всегда перемещается в соседнюю ячейку с наибольшим количеством монет и на каждом ходу собирает 1 монету (=> очищает посещенную ячейку на 1). Пешка делает это до тех пор, пока вокруг нее только 0, и она больше ничего не может собрать. Мне нужно найти сумму всех собранных монет.
Вот представление первых шагов в Paint:
Первые шаги коллекции монет:
Пример ввода:
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;
}
}
}
}