2

Cで配列の配列を作成することは可能ですか? より具体的には、隣接リスト(配列)のリスト(配列)を作成することは可能ですか?

もしそうなら、どのように?

私の教科書では、隣接行列を使用する代わりに、ダイクストラのアルゴリズム (および他の多くのアルゴリズム) に隣接リストのリストを使用していますが、この本は疑似コードであり、それでもリストの実装方法についてはまったく言及していません...

おそらく、隣接リストのリストは、隣接行列よりも多くのアルゴリズムでより効率的です。リンクされたリストを使用することを考えましたが、AFAIKは隣接行列を使用するのと同じであるため、この方法で実装することはまったく意味がありません...

4

3 に答える 3

4

多次元配列のことですか?

int mdarr[10][20];
于 2013-03-09T07:09:48.400 に答える
3

Cで配列の配列を作成することは可能ですか?

はい。

具体的には、隣接リスト(配列)のリスト(配列)を作成することは可能ですか?

はい、リンクリスト(またはあなたの場合は配列)のリンクリストを使用して実装できます。

もしそうなら、どのように?

1つのリスト(または配列)でノードを維持できます。各ノードは実際の隣接リストを指し、グラフの現在のポイントに関する情報を含みます。structこれは、関連データ(1つの情報フィールドと1つの次のポインター、および隣接リストへの1つのポインター)を使用してを作成して実装できます。

2番目のリストは、各ノードの実際の隣接リストになります。これは、最初のリストの対応するノードによって示されます。これにはノードが含まれ、各ノードは初期リストの対応するポイントに接続されたグラフポイントになります。struct関連するデータ(次のポインタ用に1つのフィールド、および1つの情報フィールド)を持つことを作成することにより、同様に実装できます。

これは多次元配列ではありませんが、完全に異なります。グラフがスパースの場合、これは隣接行列よりも少ないスペースを使用します。

例として、、、、をABに接続されているような無向グラフのノードCとします。DABC

次に、リストは次のようになります。

A -> B -> C -> D
|    |    |
B    A    A
|
C
于 2013-03-09T07:21:09.913 に答える
0

三次元配列のことですか?

この aMat[3][3] (3 つの要素のグラフ) のような隣接行列を定義します。

たとえば、aMatMulti[4][3][3] のように、それぞれ 3 つの要素の 4 つのグラフを定義できます。

于 2013-03-09T08:02:05.557 に答える