2012-04-07 22 views
0

私はグラフ構造のJavaBeansのセットをモデル化する必要があります。各Beanはグラフ上のノード/頂点であり、それらは "関連"していますビアとエッジを介して。Javaグラフとグラフ検索API

List<?>またはArrayList<?>を使用してアイテムのシーケンスを表現するのと同じように、グラフでノードを表現するための(できれば汎用の)APIが必要です。このAPIは、私がグラフを構築し、グラフからノードを追加/削除することができるようにする必要があります。

また、グラフ全体を任意のデータ値で渡すことができるようにする必要があります。そのデータを含むノード/頂点を返します。

唯一見つけられるのは組み込みのJava TreeSetですが、単一のルートノードから流れる指示木は必要ありません。私は本当の(数学的な意味で)グラフAPIが必要です。

このような解決策はそこに存在するのですか、私は自分自身を一から書いていますか(uggghhh)。前もって感謝します!後で右ノード

2)を使用するために検索することができますので、

1)あなたが値を格納することができます:

+0

本当に大したことはありません。 'クラスノード{プライベートリスト隣人; } '。 –

+0

[グラフ/ネットワークデータ構造のためのJava APIのリスト]の重複可能性(http://stackoverflow.com/questions/2152143/list-of-java-apis-for-graph-network-data-structures) –

答えて

0

私はそれを理解している場合は、同様にあなたはそれを「ノード」オブジェクトの表現を必要としますグラフの情報を保持するための事前定義データ構造。

3)検索アルゴリズムでの使用を許可します。

すべての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を返すことができます)。

ここで、検索アルゴリズムはノードのメンバー変数にアクセスして、それらが完了しているかどうかを確認できます。