0

だから私は試験のために勉強していて、それを解決する方法を理解できなかった次の問題を見つけました:

グラフ:

        typedef struct NODE{
             int weight;
             int idEdge;
             int idDestination;
             struct NODO *next;
        }Node;

そして、このプロトタイプに従ってください:

    int totVertexWithoutEdges(Node **g, int totv)

エッジのない頂点の総数を与える関数を作成する必要がありますが、それを行う方法がわかりません。それに到達するためのいくつかの手順だけで答えを求めるのではなく、どのように解決すればよいかを誰かに説明してもらえますか?

4

2 に答える 2

0

これを行う 1 つの方法は、ノードごとに 1 つのエントリを持つ配列を作成することです。最初に、この配列のすべての要素を 0 に設定します。

次に、すべてのエッジで繰り返します。エッジごとに、ソース ノード (および/または問題の解釈方法に応じて宛先ノード) に対応する配列要素を表す配列要素を 1 に変更します。これは、ノードにエッジが接続されていることを示します。

最後に、配列全体を反復し、0 エントリの数を数えます。これにより、入力/出力エッジのないノードの総数がわかります。

お役に立てれば!

于 2013-02-07T23:14:36.833 に答える
0

totVertexWithoutEdges は Node** g をブラウズするだけで済みます。これは、リンクされたリストへのポインターのアドレスになります。

たぶん(最後の要素がNULLを指しているという事実に基づいて)

while (*g != NULL)
{
     // Check out what you want about your edge things
     g = &(*g)->next;
}

しかし、totv が頂点の数を表す場合、次のようになります。

int   counter;

counter = 0;
while (counter < totv)
{
     // Check out what you want about your edge things
     g = &(*g)->next;
     counter = counter + 1;
}

リンクされたリストはよく知られているデータ構造です ;)、頑張ってください。

于 2013-02-07T23:15:24.740 に答える