Как насчет:
< and >
Hope это помогает?
Если вам нужны взвешенные ребра и мультиграфы, вы можете добавить еще один класс Кромка .
Я бы также рекомендовал использовать generics , чтобы можно было указать, какой подкласс Vertex и Edge в настоящее время используется. Например:
public class Graph<V extends Vertex> {
List<V> vertices;
...
}
Когда дело доходит до реализации алгоритмов графа, вы также можете определить интерфейсы для ваших классов графов, на которых могут работать алгоритмы, чтобы вы могли экспериментировать с различными реализациями фактического представления графа. . Например, простые графы, которые хорошо связаны, могут быть лучше реализованы с помощью матрицы смежности , более разреженные графы могут быть представлены списками смежности - все зависит от ...
BTW Эффективное строительство таких структур может быть довольно сложной задачей, Так что, может быть, вы могли бы дать нам более подробную информацию о том, для какой работы вы хотели бы их использовать? Для более сложных задач я бы посоветовал вам взглянуть на различные библиотеки графов Java, чтобы получить некоторое вдохновение.
Некоторое время назад у меня была такая же проблема, и я сделал свою реализацию. Я предлагаю вам реализовать другой класс: Edge. Затем у вершины будет список ребер.
public class Edge {
private Node a, b;
private directionEnum direction; // AB, BA or both
private int weight;
...
}
У меня это сработало. Но может все так просто. Вот эта библиотека, которая, возможно, поможет вам, если вы изучите ее код: http://jgrapht.sourceforge.net/
Взгляните на http://jung.sourceforge.net/doc/index.html библиотека графов. Вы все еще можете практиковаться в реализации собственных алгоритмов (возможно, для начала поиск в ширину или в глубину), но вам не нужно беспокоиться о создании структуры графа.
Я бы рекомендовал graphviz очень важно, когда вы дойдете до точки, где вы хотите визуализировать свои графики.
И его спутники: взгляните на класс GraphViz Ласло Сатмари вместе с notugly.xls .