Java Heap Space, принимая входные данные пользователя в больших количествах - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь решить проблему, связанную с шахматами. Программа должна принять количество возможных координат (номеров ящиков) в качестве входных данных от пользователя, например, NN, а затем рассчитать общее число путем умножения N x N, чтобы они стали числом возможных шагов, которые необходимо предпринять для перемещения одного места в другое. ,Затем программа берет начальную точку SS и конечные точки EE и выполняет вычисление, сколько шагов потребуется для достижения конечной точки.

Для первого случая, который равен 8 x 8 (возможные координаты или блоки на борту) 0 0(Начальная точка) 7 7 (конечная точка) дает значение 6 (Необходимые шаги)

Для второго случая, который равен 1000 x 7000 (Возможные координаты или поля на борту) 253 6789 (Начальная точка) 253 6789(конечная точка) дает значение 0 (необходимые шаги)

Для третьего случая, который равен 8 x 100000000 (возможные координаты или прямоугольники на борту) 3 3 (начальная точка) 3 999999999 (конечная точка) он даетошибка Java Heap Space

Может ли одна возможность попробовать этот код? и посмотреть, что может быть возможным решением? Можем ли мы контролировать пространство кучи с помощью кода Java?

Пример ввода один 8 8 0 0 7 7

Пример вывода один 6

Пример ввода два 1000 7000 253 6789 253 6789

Пример выходных данных 2 0

Пример входных данных Три 8 1000000000 3 3 3 999999999

Пример выходных данных 3 499999998 (но я получаю ошибку вывода из пространства кучи Java)

Мой код выглядит следующим образом

import java.util.Scanner;
import java.util.Vector;

        class KattisProblemC {
        static class cell {
            int x, y;
            int dis;

            public cell(int x, int y, int dis) {
                this.x = x;
                this.y = y;
                this.dis = dis;
            }
        }

        static boolean isInside(int x, int y, int N) {
            if (x >= 1 && x <= N && y >= 1 && y <= N)
                return true;
            return false;
        }

        static int minStepToReachTarget(int knightPos[], int targetPos[], int N) {
            int dx[] = { -2, -1, 1, 2, -2, -1, 1, 2 };
            int dy[] = { -1, -2, -2, -1, 1, 2, 2, 1 };
            Vector<cell> q = new Vector<>();
            q.add(new cell(knightPos[0], knightPos[1], 0));
            cell t;
            int x, y;
            boolean visit[][] = new boolean[N + 1][N + 1];
            for (int i = 1; i <= N; i++)
                for (int j = 1; j <= N; j++)
                    visit[i][j] = false;
            visit[knightPos[0]][knightPos[1]] = true;
            while (!q.isEmpty()) {
                t = q.firstElement();
                q.remove(0);
                if (t.x == targetPos[0] && t.y == targetPos[1])
                    return t.dis;
                for (int i = 0; i < 8; i++) {
                    x = t.x + dx[i];
                    y = t.y + dy[i];

                    if (isInside(x, y, N) && !visit[x][y]) {
                        visit[x][y] = true;
                        q.add(new cell(x, y, t.dis + 1));
                        System.gc();
                    }
                }
            }
            return Integer.MAX_VALUE;
        }

        public static void main(String[] args) {
            Scanner myInput = new Scanner(System.in);
            int firstIndex = myInput.nextInt();
            int secondIndex = myInput.nextInt();
            int f1 = myInput.nextInt();
            int f2 = myInput.nextInt();
            int f3 = myInput.nextInt();
            int f4 = myInput.nextInt();
            int N = secondIndex;
            int knightPos[] = { f1, f2 };
            int targetPos[] = { f3, f4 };
            System.out.println(minStepToReachTarget(knightPos, targetPos, N));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...