Я пытаюсь найти минимальный путь от указанной ячейки до ячейки назначения.
Учитывая : может двигаться вверх вниз влево и вправо
Пример : у меня есть такая матрица
int[][] matrix = {
{2 , 3, 4, 0, 1},
{2 , 0, 1, 9, 3},
{2 , 1, 0, 0, 0},
{0 , 1, 3, 3, 0},
{10 ,3, 2, 6, 8}
};
Мне нужно go из ячейки (2,2) в ячейку (4,4), тогда минимальный путь будет 1 0 0 0 0 8
Это означает, что я сначала получил минимум всех соседей, а затем отметил, что это текущая позиция, и как только я найду минимальный путь, я верну максимальное значение из этого пути.
Ожидаемый : 8 (максимальное значение в этом пути)
Получение : 1 (максимальное значение в этом пути) & (2,2) ( 2,2) (2,2) (1,2) (0,2) (0,1) при печати пути
public int maximum(int[][] matrix,int row1, int col1,int row2, int col2){
boolean[][] visited = new boolean[matrix.length][matrix[0].length];
//left and right neighbours
int[] lr_neighbour = {0, 0, -1,1};
//top and bottom neighbours
int[] tb_neighbour = {1, -1, 0, 0};
//number of same cells
int modified = 1;
//queue
Queue<Integer> queue = new LinkedList<>();
queue.add(row1);
queue.add(col1);
int x, y, min = 2048;
//to store path
ArrayList<ArrayList<Integer>> queue2 = new ArrayList<>();
ArrayList<Integer> source = new ArrayList<>();
source.add(row1);
source.add(col1);
queue2.add(source);
ArrayList<Integer> path;
//store all neighbours
ArrayList<Integer> cells = new ArrayList<>();
while (!queue.isEmpty()){
row1 = queue.remove();
col1 = queue.remove();
for (int index = 0;index < 4;index++) {
x = row1 + tb_neighbour[index];
y = col1 + lr_neighbour[index];
if (x < 0 || y < 0 || x > row2 || y > col2 || visited[x][y])
continue;
// cells.add(matrix[x][y]);
//get minimum of all neighbours
if (matrix[x][y] < min){
min = matrix[x][y];
queue.add(x);
queue.add(y);
path = new ArrayList<>();
path.add(row1);
path.add(col1);
queue2.add(path);
}
//path found
if (x == row2 && y == col2){
path = new ArrayList<>();
path.add(row2);
path.add(col2);
queue2.add(path);
break;
}
visited[x][y] = true;
}
// get minimum of all neighbours
// int ind = Collections.min(cells);
// //add its indices.
// queue.add(row1+tb_neighbour[ind]);
// queue.add(col1+lr_neighbour[ind]);
}
for (ArrayList<Integer> paths: queue2) {
System.out.print("("+paths.get(0)+","+paths.get(1)+")"+" ");
}
System.out.print("\n");
return min;
}