2012-04-07 5 views
0

그래프 구조에서 JavaBeans 세트를 모델링해야하는 위치에 있습니다. 각 bean은 그래프의 노드/정점이며 "관련"되어 있습니다 경유하고 가장자리.Java 그래프 및 그래프 검색 API

따라서 List<?> 또는 ArrayList<?>을 사용하여 일련의 항목을 나타내는 것처럼 노드를 그래프로 나타 내기 위해 (일반적으로 일반적인) API가 필요합니다. 이 API를 통해 그래프를 만들거나 그래프에서 노드를 추가/제거 할 수 있어야합니다.

또한 그래프를 임의의 데이터 값을 전달하여 검색 할 수 있어야합니다. 해당 데이터가 포함 된 노드/정점을 반환합니다.

내가 찾을 수있는 유일한 것은 기본 제공 Java TreeSet이지만 단일 루트 노드에서 오는 지시 트리가 필요하지 않습니다. 나는 진실한 (수학적 의미에서) 그래프 API가 필요하다.

그런 해결책이 거기에 존재합니까? 아니면 처음부터 내 자신을 쓰는 걸 멈추었습니까 (uggghhh). 미리 감사드립니다! 나중에 올바른 노드

2)를 사용하여 검색 할 수 있도록

1) 당신이 값을 저장 할 수 있습니다 :

+0

정말 대단한 것은 아닙니다. '클래스 Node {개인 목록 이웃; }'. –

+0

가능한 [그래프/네트워크 데이터 구조용 Java API 목록] (http://stackoverflow.com/questions/2152143/list-of-java-apis-for-graph-network-data-structures) –

답변

0

내가 그것을 이해하는 경우가 아니라 당신이하는 "노드"개체의 표현을 필요 미리 정의 된 데이터 구조를 사용하여 그래프의 정보를 유지합니다.

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 (contains()에 대한 호출은 객체가 존재하더라도 false를 반환 할 수 있음).

이제 검색 알고리즘이 노드의 멤버 변수에 액세스하여 완료되었는지 확인할 수 있습니다.