2012-04-07 7 views
0

Я в состоянии, когда мне нужно смоделировать набор JavaBeans в структуре графика, где каждый компонент является узлом/вершиной на графике, и они «связаны»/связаны с друг друга через и край.API-интерфейсы API графики и графики

Таким образом, как и один, можно использовать List<?> или ArrayList<?> для представления последовательности элементов. Мне нужен (желательно общий) API для представления узлов в графе. Этот API должен позволить мне строить график, добавлять/удалять узлы из графика, как мне нравится, и т. Д.

Кроме того, мне нужно иметь возможность искать весь график, передавая ему произвольное значение данных, и оно вернет узел/вершину, содержащую эти данные.

Единственное, что я могу найти, это встроенная Java TreeSet, но мне не требуется ориентированное дерево, которое перетекает из одного корневого узла. Мне нужен истинный (в математическом смысле) графический API.

Существует ли такое решение там, или я застрял писать свои собственные с нуля (uggghhh). Заранее спасибо!

+0

Там не очень много. 'class Node {private List соседей; } '. –

+0

Возможный дубликат [Список API-интерфейсов Java для графических/сетевых структур данных] (http://stackoverflow.com/questions/2152143/list-of-java-apis-for-graph-network-data-structures) –

ответ

0

Если я это хорошо понимал, что вам нужно представление о «Node» объект, который:

1) позволяет хранить значения, так что вы можете позже искать правильный узел

2) Используйте предопределенная структура данных для хранения информации о графике.

3) Разрешается использовать алгоритмы поиска.

Существует тривиальное решение, которое выполняет все три требования:

public class Node { 

    // Add as many fields as you need to contain the node info 
    private String mName; 
    private int mArbitraryValue; 

    // Store the adjacent nodes in a list 
    private List<Node> mAdjacencyList; 

    //Define your constructors 
    public Node(String name, int arbitraryValue, List<Node> adjacencyList) { 
     mName = name; 
     mArbitraryValue = arbitraryValue; 
     mAdjacencyList = adjacencyList; 
    } 

    /* Add your methods here depending on the functionality that 
     you want to implement 
    */ 

    public String getName() { 
     return mName; 
    } 

    public int getArbitraryValue() { 
     return mArbitraryValue; 
    } 

    public List<Node> getNeighbors() { 
     return Collections.unmodifiableList(mAdjacencyList); 
    } 

    // Add setters if you want these values to be able to change 

    public boolean addNeighbor(Node n) { 
     return !mAdjacencyList.contains((Node) n) && mAdjacencyList.add(n); 
    } 

    public boolean removeNeighbor(Node n) { 
     return mAdjacencyList.remove((Node) n); 
    } 
} 

Я не рекомендую, что вы реализуете список смежности с помощью HashMap, если ваши объекты могут быть изменены, так как это может вызвать множество к break (т.е. вызовы to contains() могут возвращать false, даже если объект присутствует).

Теперь ваши алгоритмы поиска могут обращаться к переменным-членам узла, чтобы проверить, выполнены ли они.

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