2013-12-12 5 views
2

Я пытаюсь реализовать Ford–Fulkerson algorithm в java, и у меня возникли проблемы, когда мой код становится неприятным и излишне сложным.Что такое интеллектуальный способ создания графического объекта для алгоритма Форда-Фулкерсона?

То, что я хочу, чтобы иметь:

class Node: 
    private int id 
    private static int idAssigner // I may move this to another class 
    // etc 

class flowNetwork 
    private Node source // begin point 
    private Node sink // end point 

Теперь я хочу, чтобы сгруппировать узлы так же, как я бы а (двунаправленная) дерево. Каждый узел имеет список всех узлов, к которым он подключен.

Моя проблема заключается в следующем: как я могу дать этому соединению значение (максимальный поток, текущий поток)?

Должен ли я сделать еще один класс, который имеет ConnectionNode ANode B и max flow/current flow. И если я это сделаю, как мне подключить узлы? (как и в случае, если каждый узел имеет Connection и не будет лишним? Я немного застрял. Редактировать Или я должен просто иметь Connections и реализовать какую-то функцию поиска для привязки связующих элементов. думать, чтобы быть честным.

PS

Этот класс в основном только по математике часть, поэтому я никогда не реализован график, а также не покрывает этот курс, так что спасибо за помощь новичку :) (если это не закрывается, как 5 минут).

+0

Взгляните на библиотеку [JUNG] (http://jung.sourceforge.net/), которую можно использовать для моделирования узлов и соединений, а также визуализации – GrahamA

+0

Это домашнее задание, у меня очень плотный график на это, не могли бы вы указать мне на что-то в API? – Kalec

ответ

-1

Я думаю, вы можете использовать карту связанных узлов в каждом узле. С ключом узла и информацией о соединении в качестве значения.

Это не быстрое решение, но это просто.

Быстрее будет иметь матрицу, элементы которой являются объектами ссылок, содержащие всю информацию о ссылке. Строки и столбцы будут индексами узлов.

+0

И тогда, когда я хотел бы найти путь, я просто посмотрел бы в матрице (я предпочитаю матричный подход), и я не говорю, что я выбрал строку A, столбец B, обозначающий A-> B, а значение - поток ? И тогда у меня будет другая матрица, которая будет представлять поток, который используется? – Kalec

+0

@Kalec вы можете иметь объект ссылки в матрице. Это элементы могут быть не просто весом связи между узлами, а также потоком тока или макс между узлами. – Seagull

Смежные вопросы