2

自己定義されたノード タイプでグラフを作成する必要があり、ノードと接続は txt ファイルから 1 つずつ読み込まれます。

ファイル形式は次のようになります: startNode 属性 endNode.

1 行読むたびに、startNode と endNode の 2 つのノード オブジェクトを作成しました。それらの間にエッジを追加します..

ただし、startNode が複数の行に存在する場合があります。

例 V1 ... V2 ; V1 ... V3

したがって、エッジを追加する前に、グラフにノードが含まれているかどうかを確認する必要があります..そして、新しく作成されたノードの代わりにグラフで頂点を使用する必要があります..

jungには、この問題を解決する組み込みの方法がありますか? または何か提案はありますか?

4

2 に答える 2

2

簡単な答えは次のとおりです。契約により、JUNG のグラフ実装は、カスタム ノード/エッジ オブジェクトの実装が正しいことequals()を実行する限り、これを処理します。hashCode()

頂点をグラフに追加しようとして、それが既にグラフに存在している場合、メソッドは の類似のメソッドaddVertex()と同様に false (「何も行われていない」ことを意味します) を返します。add()Set

addEdge()また、接続された頂点がまだ存在しない場合は、これらのメソッドが接続された頂点をグラフに追加することにも注意してください。

于 2011-03-18T18:46:31.460 に答える
1

JUNG は、異なるオブジェクトを参照している限り、頂点 (およびエッジ) が異なると見なします。同じプロパティを持つ 2 つの頂点オブジェクトを作成すると、それらは異なる頂点と見なされ、両方をグラフに挿入できます。JUNG には、2 つの頂点オブジェクトが同じかどうかのチェックを実行するために (頂点オブジェクトのプロパティをチェックするために) オーバーライドできる equals メソッドがありません。したがって、グラフに既にある頂点を追加しないように、グラフの頂点 (およびエッジ) のリストを手動で維持する必要があります。ただし、HashMap を使用して簡単に行うことができます (グラフが大きすぎない場合)。

于 2010-01-19T15:29:58.837 に答える