Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 21:57   #1
Levilaulada
Новичок
Джуниор
 
Регистрация: 20.07.2008
Сообщений: 1
Злость Помогите справиться с java.lang.OutOfMemoryError: Java heap space

Задача - поиск максимального потока в графе. Кому не лень, посмотрите пожалуйста, почти весь код был взят с википедии. Не знаю в чем ошибка

Код:
import java.util.*;
 //E- матрица смежности
 //C-матрица весов


public class EdmondsKarp1 {
    public static int edmondsKarp(int[][] E, int[][] C, int s, int t) {
        int n = C.length;
        
        System.out.println("Вершина истока: "+ s);
        System.out.println("Вершина стока: " + " " +t);
        System.out.println("Матрица смежности вершин: ");  
          int j =0;
      for (int i=0; i<t;i++)
        {
        for(int k=0; k<t; k++){
        System.out.print( C[0][j] + " ");
         j++;}
        System.out.println();
        }
       
       int[][] F = new int[n][n];
        while (true) {
            int[] P = new int[n]; //количество приоритетов такое же как и количество узлов
            Arrays.fill(P, -1);//устанавливаем приоритет всех вершин -1
            P[s] = s;//приоритет истока равен 1
            int[] M = new int[n]; //создаем массив максимальных значений
            M[s] = Integer.MAX_VALUE;
        
            Queue<Integer> Q = new LinkedList<Integer>();//создаем связный список со сборщиком мусора
            Q.offer(s); // Обращаемся к истоку
            LOOP:
            while (!Q.isEmpty()) { //пока множество не пусто
                int u = Q.poll(); // возвращаем значение Queue и присваиваем его пропускной способности
                for (int v : E[u]) {//пока есть путь и дуга не насыщена
                  //v - величина потока, на которую можно увеличить
                    if (C[u][v] - F[u][v] > 0 && P[v] != -1) { //если пропускная спосбность больше потока на данной дуге и приоритет узла не равен -1
                        P[v] = u; 
                        M[v] = Math.min(M[u], C[u][v] - F[u][v]);
                        if (v != t)
                            Q.offer(v);
                        else {
                            // обратный поиск
                            while (P[v] != v) {
                                u = P[v];
                                F[u][v] += M[t];
                                F[v][u] -= M[t];
                                v = u;
                            }
                            break LOOP;
                        }
                    }
                }
            }
            if (P[t] == -1) { //исключение : путь не найден
                int sum = 0;
                for (int x : F[s])
                    sum += x;
                return sum;
            }
        }
    }
}


ругается на эту строчку: if (P[t] == -1) !!!!

Последний раз редактировалось Levilaulada; 16.05.2009 в 21:59.
Levilaulada вне форума Ответить с цитированием
Старый 17.05.2009, 10:59   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Вероятно индекс выходит за границы массива, попробуйте создать точку останова и проверить t в этой строке.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите по Java МаксMorfey Помощь студентам 0 10.04.2009 18:17
Exception in thread " main " java.lang.ArrayIndexOUTofBounds 3.14oner Общие вопросы по Java, Java SE, Kotlin 2 08.11.2008 11:18
Java Enterprise Editon и Java Standard Editon Deikwon Общие вопросы по Java, Java SE, Kotlin 2 04.12.2007 10:00