入力ファイルは数字の単純なリストになると言われています。
1 3 4
2 3
3 4
4 1 2
最初の数字がソース ノードで、次の数字が隣接ノードです。
どうやって保存するのがベストなのか模索中です。最初に、これらすべてのノードを含む配列である「グラフ」を初期化したかったのです。次に、ファイルを 1 行ずつ読み取って、ルート ノードをグラフ配列に格納し、ノードのアウトリスト (隣接するノード) を次の番号で更新して、行の終わりに到達するまで、これを各行で繰り返します。 EOF。
ただし、グラフを初期化する方法に苦労しています。サイズがヒットしたら、特定のサイズと realloc() を想定するだけですか? 最初にファイルを読み取り、行数を数えてサイズを確認してから、ファイルを再度読み取ってノードを保存しますか? 他に方法はありますか?
私のデータ構造のコードは次のとおりです。
int initialize (Graph *mygraph, int MaxSize) {
mygraph->MaxSize = MaxSize;
mygraph->table = (Node *)malloc(sizeof(Node) * MaxSize);
return 0;
}
int insert_node (Graph *mygraph, int n, char *name) {
mygraph->table[n].name = strdup(name);
mygraph->table[n].outdegree = 0;
return 0;
}
int insert_link (Graph *mygraph, int source, int target) {
List *newList = (List *)malloc(sizeof(List));
newList->index = target;
newList->next = mygraph->table[source].outlist;
mygraph->table[source].outlist = newList;
return 0;
}
したがって、ファイルを読み取ると、
グラフを初期化します。
最初の数値を読み取り、それを新しいグラフ ノードとして保存します。
「\n」を押すまで次の番号を読み取り、これらを上記のルート ノードへのグラフ リンクとして保存します。
EOFに達するまで、これを各行に対して行います。
ご覧のとおり、ファイル全体が読み取られるまで、「MaxSize」が何であるかわかりません。
ありがとう!私はCにかなり慣れていないので、ばかげたことをした場合は申し訳ありません。