ヒントを出すので、これで書けるところまで書いてみてください。
●入力の読み込み方
scanf()関数を用いることで、入力を読み込むことができます。
書式%dを用いると整数を、%(最大バイト数)sを用いると空白を含まない文字列を読み込むことができます。
scanf()は成功すると読み込んだデータ数、失敗すると-1を返すので、
これを用いて読み込みが成功したかをチェックすることができます。
例
コード:
#include <stdio.h>
int main(void) {
int ivalue;
char cvalue1[4], cvalue2[4], cvalue3[4];
// 整数を読み込む
if (scanf("%d", &ivalue) != 1) return 1;
// 文字列を読み込む (最大バイト数は終端のNUL文字の分バッファサイズより1少ない)
if (scanf("%3s", cvalue1) != 1) return 1;
// 書式は複数指定できる
// ここで紹介する書式では、読み込みは空白で区切られる
// 読み込み先は書式の数指定しないといけない
if (scanf("%3s%3s", cvalue2, cvalue3) != 2) return 1;
// 読み込んだデータを出力してみる
printf("%d\n", ivalue);
printf("%c\n", cvalue1[0]);
printf("%c %c\n", cvalue2[0], cvalue3[0]);
return 0;
}
入力例
出力例
●リンクリストへの要素の追加の仕方
1. 新しいノードを用意し、値を設定する
2. 新しいノードのnextが、追加したい位置の次のノードを指すようにする
3. 追加したい位置の前のノードのnextが、新しいノードを指すようにする

- リンクリストへの要素の追加
- linked-list-20200619.png (11.75 KiB) 閲覧数: 8095 回
「追加したい位置の次のノード」はリストの末尾への追加ならNULL、
「追加したい位置の前のノードのnext」はリストの先頭への追加なら
リストを指すポインタ(ここではgrp.vset[i].link)になります。
「新しいノードを用意」するには、
A. stdlib.hをincludeし、malloc()を用いる
B. あらかじめ十分な数(例えばVMAX * VMAX)のノード配列を用意し、そこから取る
という方法があります。
●枝の追加のポイント
今回は無向グラフのようなので、
例えば「A F」という点ラベル対があったら、
A→Fの枝だけでなくF→Aの枝も追加しないといけません。
ただし、今回の入力例にはありませんが、
例えば「A A」という点ラベル対(自己ループ)については、
A→Aの枝を二重に追加してしまわないように注意するべきでしょう。
今回の入力例では、例えばB→Eの枝(B E)よりB→Aの枝(A B)が先に来ているので、
単純に枝を入力順にリストの先頭に追加してしまうと、
グラフのリンクリスト表現が図のとおりにならなくなってしまいます。
そこで、枝を追加する際はリンクリストを探索し、
ラベルが昇順になる位置に枝を表すノードを追加するようにするといいでしょう。