2012-04-21 5 views
3

Я пытаюсь создать класс Graph, который использует другой класс, класс Vertex для представления всех вершин графа. Я не уверен, нужен ли мне класс Edge, который будет представлять возможные соединения между двумя вершинами, потому что каждая вершина может отслеживать другие узлы, к которым она подключена. Но я не уверен, правильно ли это. Как вы думаете?Выполнение графов в java

спасибо.

+0

Покажите нам код :) – paulsm4

+0

В: Это «домашнее задание»? Если да, отметьте это как таковое. В любом случае, взгляните на это: http://en.literateprograms.org/Dijkstra%27s_algorithm_%28Java%29 – paulsm4

+0

Это не домашнее задание. Я знаю, как реализовать класс с использованием и без использования класса edge. Я просто хочу знать, правильно ли это без класса Edge. Anw благодарит за ссылку. – FranXh

ответ

10

Вам не обязательно использовать класс Edge. Вы можете использовать списки смежности и по-прежнему представлять график невзвешенный. Для взвешенного графика вам нужен способ представления стоимости края, и поэтому использование класса Edge было бы уместным.

class Graph<E> { 
    private List<Vertex<E>> vertices; 

    private static class Vertex<E> { 
     E elem; 
     List<Vertex<E>> neighbors; 
    } 
} 
+0

Да, это то, о чем я думал. Чтобы отслеживать другие вершины без использования класса Edge. Спасибо!!!! – FranXh

+1

Все хорошо и хорошо, пока вам не понадобится взвешенный ориентированный граф. Тогда вам понадобятся метаданные или еще лучше класс Edge. –

+0

@AndrewFinnell: Спасибо. Обновлено. – blackcompe

2

Обычно representation выбран исходя из его пригодности к использованию. В этом простом примере GraphPanel использует не более чем List<Edge> в качестве своей модели.

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