0

ソース (頂点)、ターゲット (頂点)、重みを格納する Edge クラスがあります。

名前、x 座標、y 座標、および Edge[]隣接リストを格納する Vertex クラスがあります。

エッジと頂点の 2 つの ArrayList を格納する Graph クラスもあります。

現在、頂点/ノードとエッジがプロットされると、頂点とエッジのリストにそれぞれ自動的に追加されます。

これら 2 つの配列リストを使用して Edge[]隣接リストを埋めたいと思いますが、これを行う方法がわかりません。誰かが私にポインタやコードがどのように見えるかの概要を教えてくれれば幸いです.

ありがとうございました。

4

3 に答える 3

1

グラフを実装する方法はいくつかあります。

すべてのインスタンスがネイバーを含むArrayListを保持するVertexクラスを作成することも、bool | V | X |V|を作成することもできます。Matrix [i] [j]がtrueの場合、エッジを頂点iから頂点jに向けたことを意味する行列。

于 2012-07-18T19:48:59.723 に答える
1

まず第一に、コードには冗長性があります。Edge クラスにソース頂点を含める必要はありません。これは、エッジを Vertex クラスに格納するためです。その頂点がソースになることは明らかです。

任意の頂点の隣接リストにエッジを追加するには:

A と B の 2 つの頂点があるとします。ここで、A はソース、B はターゲット頂点です。エッジを作成するには、Edge クラスのインスタンスを作成し (明らかにコンストラクターが定義されています)、それを頂点 A の隣接リストに追加します。

Edge e1= new Edge('B' , weightofedge);

頂点のインスタンスが v1、つまり頂点 A であるとします。v1.adjacentList[index]=e1;

または、1行で行うこともできます。

于 2012-07-18T19:41:40.117 に答える
1

.either メソッド (パラメーターとして Edge を取り、いずれかの頂点を返す) と .other メソッド (頂点を取り、その Edge の他の頂点を返す) を作成します。Graph クラスのエッジ リストを反復処理します。エッジごとに、.either を呼び出して頂点を 1 つ取得し、それを何らかの変数に格納します。これを v1 と呼びましょう。ここで、.other を呼び出して他の頂点を取得し、それを v2 と呼びます。

v1 と v2 の組み合わせを v1 の Edge[] と v2 の Edge[] の両方に追加します。

于 2012-07-18T18:47:20.393 に答える