Реализован класс для невзвешенных и взвешенных графиков JAVA

#java #graph

Вопрос:

В данный момент я готовлюсь к техническим собеседованиям и начал просматривать свои знания на графиках. Я использую Java для реализации графиков с нуля.

До сих пор я рассматривал взвешенные графики и невзвешенные графики. Я хотел бы знать, есть ли способ объединить оба этих типа графиков в один класс?

Я знаю, что подход (при использовании списков смежности) для невзвешенных графиков заключается в хранении массива LinkedList с каждой из вершин в самом объекте класса Graph. Затем мы можем добавить вершины в этот график, чтобы создать график, в котором каждая из вершин в графике связана с другими вершинами в списке ссылок.

Для подхода с взвешенным графом (с использованием списков смежности) мы можем создать класс ребер, который содержит информацию о назначении, источнике и весе для вершин, к которым подключено ребро. Затем мы можем сохранить это в списке ссылок на объекте класса Graph.

Я подумал, может быть, ввести поле перечисления в класс Graph, чтобы мы могли определить, является ли график Взвешенным или Невзвешенным. Это выглядело бы так.

 private LinkedList<Edge> adjList[];
private GraphType graphType;
private int vertices;
 

Где GraphType-это перечисление:

 public enum GraphType {
    WEIGHTED,
    NON_WEIGHTED
}
 

Как будет выглядеть эта реализация класса Graph?

Ваше здоровье!

Комментарии:

1. Это будет выглядеть точно так же, как класс взвешенного графика? Но вы бы проигнорировали все взвешенные функции/методы, если бы тип был НЕВЗВЕШЕННЫМ, и просто указали бы первый найденный кратчайший путь, а не наилучший взвешенный путь. Лучшим решением может быть наличие базового класса графика (невзвешенного) с нормальной функциональностью и наличие класса взвешенного графика, который расширяет базовый класс графика и добавляет дополнительную функциональность?

2. Ах да, это хорошее решение для наследования. Я не могу поверить, что пропустил это. Большое спасибо!