15

ノードに値を保存し、個々のノードが接続されている他のノードも保存するグラフ(具体的にはプログラムグラフ)を作成するプログラムを作成したいと思います。

リンクリストを使用してこれを行うことを考えています。これは正しい方法ですか?他のアドバイスをいただければ幸いです。

4

3 に答える 3

25

ほとんどの場合、隣接リストを使用してグラフをモデル化することをお勧めします。これを行うための既存のフレームワークが存在する可能性がありますが、演習として表現に関心がある場合は、通常 2 つのことが必要です。まず、すべてのノードを含む HashMap です。ノードのノード ラベルをキーにすることができ、ノード自体が値になります。

Java API は HashMap をここに文書化しています。

各ノード オブジェクトには、そのノードに隣接するノードのリストが必要です。これは、ここに記載されている ArrayList を使用して行うのが最適です。

これがどのように整理されるかです。

import java.util.Hashmap;
import java.util.ArrayList;

class Node {
    String label;
    ArrayList<Node> adjacencyList;
}

HashMap<String, Node> graph = new HashMap<String, Node>();

グラフで実行したいほとんどのアルゴリズムは、この表現で適切に実行されます。

于 2012-04-16T19:36:22.827 に答える
1

あなたが探しているのはTreeNode APIのようです。実際には、swing パッケージ内に Java SE に既に存在するすばらしいものがあり、デフォルトの実装はjavax.swing.tree.DefaultMutableTreeNodeです。これは Swing アプリケーションの外部で使用でき、非常に標準的な TreeNode モデルを提供します。

getChildren ()、getParent ()、setUserObject () など、必要に応じてあらゆるものが見つかります。また、ノード ツリーをクロールして検索するためのすべての再帰メソッドも見つかります。

幸いなことに、数分で JTree UI を作成できるようになります。

于 2012-04-16T21:14:17.777 に答える
0

独自のグラフ オブジェクトを作成するか、Jungなどを使用できます。

于 2012-04-16T19:13:34.747 に答える