【PTA】6-3 次数0の有向グラフ出力頂点(13点)(C言語)

6-3 有向グラフ出力次数0の頂点(13点)

トピック:

この質問では、有向グラフの出次数 0 のすべての頂点を出力する関数の実装が必要です。

関数インターフェースの定義:

関数インターフェイスは次のとおりです。 void PrintV(MGraph G);

G は、隣接行列を記憶構造として使用する有向グラフです。

審判テスト手順の例:

&G->vexs[i]); for (i = 0; i < G->vexnum; i++) for (j = 0; j < G->vexnum; j++) G->arcs[i][j] = 0; for (k = 0; k < G->arcnum; k++) {

















scanf("%d%d", &i, &j);
G->arcs[i][j] = 1;
} } /
コードはここに埋め込まれます*/

入力サンプル:

例: 有向グラフ
ここに画像の説明を挿入

最初の行は、グラフの頂点の数 n と円弧の数 e を示します。2 行目は n 個の文字を示し、n 個の頂点のデータ要素の値を表します。これに行 e が続き、各円弧の 2 つの頂点番号が示されます。

4 5
ABCD
1 0
2 0
2
1 3 2
3 1

出力例:
出力は 2 行で、1 行目は出力次数 0 の頂点の数、2 行目は入力順序に従って出力次数 0 のすべての頂点要素の値を出力します。頂点の要素値は文字型で、出力形式は各文字の後にスペースが続きます。出力次数が 0 の頂点がない場合、出力は 1 行のみで、数値は 0 になります。

1A
_

アイデア:
最初のステップは、各ノードの出次数を計算することです。有向グラフの i 番目のノードの出次数を計算するには、つまり、od で示される隣接行列の i 番目の行のノード数の合計を計算します。同時に次数が0のノードの総数の合計を数えます。
2 番目のステップは、出力を分類することです。出次数ノードの数が 0 の場合は 0 を出力し、出次数が 0 のノードがある場合は総数と対応するノードを出力します。

C言語コード:

void PrintV(MGraph G){
    
    
    int sum=0;//出度为0的顶点个数
    
    //计算各个结点的出度
    for(int i=0;i<G.vexnum;i++){
    
    
        int od=0;
        for(int j=0;j<G.vexnum;j++){
    
    
            if(G.arcs[i][j]==1) od++;
        }
        if(od==0) sum++;
    }
    
    if(sum==0){
    
    
            printf("0");
        }
        else if(sum>0){
    
    
            printf("%d\n",sum);
            for(int i=0;i<G.vexnum;i++){
    
    
                int od=0;
                for(int j=0;j<G.vexnum;j++){
    
    
                    if(G.arcs[i][j]==1) od++;
                }
                if(od==0){
    
    printf("%c ",G.vexs[i]);}
             }
       }
}

おすすめ

転載: blog.csdn.net/qq_51669241/article/details/117157103