1

離散イベントシミュレーターをシミュレートする必要があります。そのために、30ノードで構成されるネットワークを生成し、生成されたグラフが指示されているかどうかを確認する必要があります。誰かがこれから始める方法を教えてもらえますか?これを行うためにBoostライブラリを使用するべきではありません。はい、これは課題です。最初にアドバイスが必要です。先に進むには、いくつかのポインタが必要です。

#define MAXNODES 30

struct {
int p;
int *incoming;
int *outgoing;
} NODE[MAXNODES]
//The struct defines each node and the neighbors to it. 

上記の構造体の定義は正しいですか?

4

2 に答える 2

1

ランダムグラフを生成できると思います。また、グラフの隣接行列表現に精通していることを前提としています。

その場合は、グラフの隣接行列表現を使用します。これを表すには、2D配列を使用します。

したがって、グラフは次のように定義されます。

#define MAXNODES 30
int graph[MAXNODES][MAXNODES];

グラフは重み付けされていませんか、それとも重み付けされていますか?重み付けされていない場合、マトリックスの各要素(graph[3][7]たとえば)は0または1のいずれかになります。0の場合、ノード3と7(この例では)を接続するエッジはありません。 1、それから確かにエッジがあります。

重みが付けられている場合、0はエッジがないことを意味しますが、数値(1、9、234など)はそのエッジの重みを示します。

したがって、ループを使用して各配列要素の数値を入力できます-したがって、ノードの各ペアを調べて、重みをランダムに割り当てます(重みなしの場合は0、エッジがある場合はいくつかの数値、weighted-vs-重み付けされていません。)

したがって、あなたの質問に答えるために、「方向性」をチェックするのは簡単です。グラフが指示されている場合、graph[3][7]とgraph[7][3]は同じ値になります。したがって、すべてのペア(graph[i][j]とgraph[j][i])をチェックして、値が等しいかどうかを確認できます。行列が対称であるかどうかを確認しています。

対称でない場合(つまり、[3] [7]は0ですが、[7] [3]は1です)、一方向にエッジのみがあり、方向付けられています。また、各ペアに2つの値([3] [7] = 5、[7] [3] = 21)がある場合、移動する方向に応じて重みが変化するため、グラフが方向付けられます。

于 2009-12-02T06:56:33.317 に答える
0

最初に「指向性」の特定のバージョンを定義する必要があると思います。あるノードが別のノードに先行するかどうかを決定するための基礎は何ですか?たとえば、各ノードに乱数を割り当てるだけですか?もしそうなら、あなたの構造体は不完全なようです。そのノードの位置値を保持するには、少なくとも追加のデータ要素が必要になります。

于 2009-11-30T16:43:29.513 に答える