関数translate_into_graph()を完成させて、隣接行列のファイルを読み込んで、有向きグラフの情報をdot形式にて表示するプログラム(C言語で)をつくりたいです。構造体や、リストを最近習ったばかりで、このプログラムを理解して完成させるのが難しかったので、是非教えて頂けないでしょうか。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 5
#define boolean int
#define true 1
#define false 0
typedef boolean adjmatrix[N][N];
typedef int vindex;
typedef struct edgecell { // 有向辺のデータ構造
vindex destination; // 有向辺の終点destination
struct edgecell ∗next; // 始点を同じくする,他の有向辺へのポインタ
} edgecell;
typedef edgecell ∗ vertices[N];
typedef struct { // グラフのデータ構造
int vertex num; // 頂点数
int edge num; // 辺の数
vertices vtop; // 頂点のデータ構造
} graph;
// 隣接行列をファイル datafile から読み込む
int read adjacency matrix( char ∗datafile, adjmatrix mat ) {
FILE ∗fp; // 入力データのファイルポインタ
int vertex num; 36 vindex src, dest;
fp = fopen( datafile, "r" ); // ファイルを開く
fscanf( fp, "%d\n", &vertexnum ); // 頂点数 の読み込み
if ( vertexnum >=N){
fprintf( stderr, "#####このプログラムが扱えるのは頂点数が%d までのグラフです\n", N );
exit(1); }
for (src = 0; src < vertex num; src++) {
for (dest = 0; dest < vertex num; dest++) {
fscanf( fp, "%d\n", &mat[src][dest] ); // 隣接行列の要素を1つずつ読み込む
}
} fclose( fp ); //
return vertex num;
}
// 辺の追加 辺は頂点番号 src から dest へ向う
void add edge( graph ∗g, vindex src, vindex dest ) {
edgecell ∗edge = (edgecell ∗)malloc( sizeof( edgecell ));
edge−>destination = dest;
edge−>next = g−>vtop[src];
g−>vtop[src] = edge;
}
// 隣接行列からグラフを作成
void translate into graph( adjmatrix mat, graph ∗g){
// この関数を完成させたい
// 隣接行列の要素が 1 なら有向辺があるということ → 有向辺を追加 (関数 add_edge を使う)
}
void print graph( graph ∗g){
vindex v;
printf( "digraphG{\n" );
printf( "size=\"14,10\";node[fontsize=10,height=0.01,width=0.01];edge[len=3.0];\n");
for (v = 0; v < g−>vertex num; v++) {
edgecell ∗edge;
for (edge = g−>vtop[v]; edge != NULL; edge = edge−>next) {
printf( "%d->%d;\n", v+1, edge−>destination+1 );
}
}
printf( "}\n" );
}
void free graph( graph ∗g){
vindex v;
for (v = 0; v < g−>vertex num; v++) {
edgecell ∗edge, ∗next edge;
for (edge = g−>vtop[v]; edge != NULL; edge = next edge) {
next edge = edge−>next;
free( edge );
}
}
}
int main( int argc, char ∗argv[] ) {
char ∗datafile; // 入力データのファイル名
adjmatrix a; // テキストでは大文字 A で定義
graph g;
if ( argc<=1){
fprintf( stderr, "#####ファイルを指定してください\n" );
return 1;
}
datafile = argv[1]; // ファイル名の取得
g.vertex num = read adjacency matrix( datafile, a );
translate into graph( a, &g );
print graph( &g );
free graph( &g );
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
強連結判定を行うプログラムについて(C言語)
C言語・C++・C#
-
隣接行列プログラム
C言語・C++・C#
-
リストを使った逆ポーランド記法を処理するプログラム(C言語)を教えて下さい!
C言語・C++・C#
-
-
4
sys/time.hのインクルードができない
C言語・C++・C#
-
5
行列をべき乗させるプログラム
C言語・C++・C#
-
6
どんなプログラムを書いても指定されたファイルが見つかりません。と出てきます。どうやったら解決しますか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜCSQとCIP形式ではコ...
-
c言語でのfscanfについて
-
fgets( ) の返り値は何?
-
txtファイルの文字を配列に格納
-
c言語 ファイルから数字を読み...
-
【C言語】ファイルを読み込んで...
-
日本語ファイル名のFTPについて
-
C言語 連番データの読み込み
-
C言語を用いて、csvファイル内...
-
複数ファイルの同時読み込みの...
-
ガンマ変換 C言語でプログラ...
-
lockfについて
-
構造体とファイル検索(><)
-
C言語でファイル読み書きを早く...
-
ファイルへの書込み処理が異常...
-
fgets関数の利用 c言語
-
OpenGLによる描画内容をBMP出力
-
C言語 ファイル入出力について
-
CSVファイルの内容を構造体に格...
-
C言語でファイル名を変数にした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
自己相関関数を求めるプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
a*(1-exp(-bx))+cの近似の方法
おすすめ情報