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]);}
}
}
}