Минимум всех соседей в пути - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь найти минимальный путь от указанной ячейки до ячейки назначения.

Учитывая : может двигаться вверх вниз влево и вправо

Пример : у меня есть такая матрица

      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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...