Жадная стратегия высот с запада на восток, начиная с произвольного среднего положения - PullRequest
0 голосов
/ 17 апреля 2020

Задача, стоящая перед нами, состоит в том, чтобы найти минимальную стоимость матрицы, используя метод прямого движения вверх-вниз ie. например, у нас есть матрица 3x3:

r / c 0 1 2

0 4 9 6

1 1 2 9

2 7 5 3

По сути, мы берем среднюю точку к востоку от вышеуказанной матрицы, равную 1. Оттуда выбираем первое значение столбца 1 [0,1] и сравниваем его с остальными значениями во всем В столбце, чтобы определить, является ли это наименьшим значением, равным 2, оттуда с использованием метода прямого-восходящего-нисходящего, мы можем двигаться только от 2 [1,1] до 6 [0,2] (вверх) или 9 [1,2] ( вперед) или 3 [2,2] (вниз), и мы должны выбрать самый низкий, который в этом случае равен 3 [2,2], и сделать то же самое для средней точки на запад, чтобы найти минимальный путь. Это то, что нас просят сделать в нашем задании. Наша текущая проблема с приведенным ниже кодом состоит в том, что мы продолжаем получать ошибки, когда вывод дает мне случайное одиночное число di git, которое я не могу отследить, почему в качестве одного из файлов, например, матрица 7x9 имеет 4-значные значения каждый. или arrayoutofbound выражение -1. ​​

public void StrategyB(String file, int[][] MAP_e, int[][] MAP_w, int row, int col) throws IOException {
        int min;
        int mid = col / 2;
        int Forward=0;
        int Up=0;
        int Down=0;
        int position_e = 0;
        int position_w = 0;
        int[][] path = new int[row][col];

        for (int i = 0; i < MAP_e[0].length; i++) {
            min = MAP_e[i][0];
            for (int j = mid; j < MAP_e.length; j++) {
                path[i][j] = min;



                    if (Forward < min) {
                        position_e = MAP_e[i][j] - MAP_e[i][j + 1];
                    } else if (Down < min) {
                        position_e = MAP_e[i + 1][j + 1];
                    } else if (Up < min) {
                        position_e = MAP_e[i - 1][j + 1];
                    }

                System.out.println("Minimum of column from mid to west" + j + "=" + position_e);
            }

        for (int j = mid; j < MAP_w[0].length; j--) {
            min = MAP_w[0][j];
                path[i][j] = min;


                if (Forward < min) {
                    position_w = MAP_w[i][j] - MAP_w[i][j + 1];
                } 
                else if (Down < min) {
                    position_w = MAP_w[i + 1][j + 1];
                } 
                else if (Up < min) {
                    position_w = MAP_w[i - 1][j + 1];
                }
                System.out.println("Minimum of column from mid to east" + j + "=" + position_w);
                MAP_e[i][j] = position_e;
                MAP_w[i][j] = position_w;

        }

        }
        costpath(MAP_e, MAP_w);
    }

    public void costpath(int[][] MAP_e, int[][] MAP_w) throws IOException {

        int Cost_e = 0;
        int Cost_w = 0;
        int pathcost = 0;
        for (int i = 0; i < MAP_e.length; i++) {
            for (int j = 0; j < MAP_e.length; j++) {
                Cost_e += MAP_e[i][j];
            }
        }
        for (int i = 0; i < MAP_w.length; i++) {
            for (int j = 0; j < MAP_w.length; j++) {
                Cost_w += MAP_w[i][j];
            }
        }
        pathcost = Cost_e + Cost_w;
        System.out.println("\n");
        System.out.println("The Cost is : ");
        System.out.println(pathcost);

    }   
...