Поскольку об этом легче думать, я бы предпочел представлять его в виде дерева. (Также облегчает обход карты и сохранение промежуточных градусов.)
Вы можете иметь класс Node
, который будет иметь коллекцию дочерних Node
объектов. При необходимости вы могли бы также представить дочерние отношения как объект Relationship
, который имел бы как вес, так и указатель Node
, и вы могли бы хранить коллекцию объектов Relationship
.
Затем вы можете пройтись по дереву, начиная с корня, и пометить каждый посещенный узел его степенью.
class Node{
String name;
List<Relationship> children;
}
class Relationship{
Node child;
double weight;
}
class Tree{
Node root;
}
Здесь Tree
, вероятно, должен иметь такой метод:
public Node findNodeByName(String name);
И Node
, вероятно, должен иметь такой метод:
public void addChild(Node n, double weight);
Затем, когда вы анализируете каждую строку, вы вызываете Tree.findNodeByName (), чтобы найти соответствующий узел (и создаете его, если его нет ... но этого не должно случиться, если ваши данные хороши), и добавляете последующие элементы на линии к этому узлу.
Как вы указали, группы обеспечения доступности баз данных невозможно преобразовать в деревья, особенно потому, что у некоторых узлов есть несколько родителей. То, что вы можете сделать, это вставить тот же узел, что и дочерний элемент нескольких родителей, возможно, используя хеш-таблицу, чтобы решить, был ли пройден определенный узел или нет.