課題が全く分かりません...教えてください
Posted: 2020年6月19日(金) 16:41
添付した画像が課題なのですが、いきなり応用的なものを出されて全然分かりません。どなたか教えていただけないでしょうか?
#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;
}
#include<stdio.h>
#include<stdlib.h>
#define VMAX 10
struct edge
{
char label;
struct edge *next;
};
struct vertex
{
char label;
struct edge *link;
};
struct graph
{
int v,e;
struct vertex vset[VMAX];
};
int main()
{
struct graph grp;
int i,n;
char c;
struct edge *head,*p;
for(i=0;i<VMAX;i++)grp.vset[i].link=NULL;
//点数読み込み
grp.v=scanf("%d%*c",&n);
//点ラベルを読み込み
for(i=0;i<n;i++){
scanf("%c%*c",&c);
}
//枝数読み込み
grp.e=scanf("%d%*c",&n);
//点ラベル対(枝)を読み込み
//グラフの確認
for(i=0;i<grp.v;i++){
for(p=grp.vset[i].link; p!=NULL; p=p->next) {
printf("(%c,%c)\n",grp.vset[i].label,p->label);
}
}
return 0;
for(i=0;i<grp.v;i++){
printf("[%c]:",grp.vset[i].label);
for(p=grp.vset[i].link; p!=NULL; p=p->next){
printf("%c",p->label);
if(p->next !=NULL) printf("->");
}
printf("\n");
}
}
//点数読み込み
grp.v=scanf("%d%*c",&n);
// 追加:バッファオーバーラン防止
if (n > VMAX){
fputs("too much vertice!\n", stderr);
return 1;
}
grp.v=n; // 追加:読み込んだ点数を保存する
//点ラベルを読み込み
for(i=0;i<n;i++){
scanf("%c%*c",&c);
grp.vset[i].label=c; // 追加:読み込んだ点ラベルを保存する
}
//枝数読み込み
grp.e=scanf("%d%*c",&n);
grp.e=n; // 追加:読み込んだ枝数を保存する
//点ラベル対(枝)を読み込み
#include<stdio.h>
#include<stdlib.h>
#define VMAX 10
struct edge
{
char label;
struct edge *next;
};
struct vertex
{
char label;
struct edge *link;
};
struct graph
{
int v,e;
struct vertex vset[VMAX];
};
int main()
{
struct graph grp;
int i,n;
char c1,c2;
struct edge *head,*p;
for(i=0;i<VMAX;i++)grp.vset[i].link=NULL;
//点数読み込み
grp.v=scanf("%d%*c",&n);
grp.v=n;
printf("\n");
//点ラベルを読み込み
for(i=0;i<n;i++){
scanf("%c%*c",&c);
grp.vset[i].label=c;
}
printf("\n");
//枝数読み込み
grp.e=scanf("%d%*c",&n);
grp.e=n;
printf("\n");
//点ラベル対(枝)を読み込み
for(i=0;i<n;i++){
scanf("%c%*c %c%*c",&c1,&c2);
grp.vset[i].link=
}
//グラフの確認
for(i=0;i<grp.v;i++){
printf("[%c]:",grp.vset[i].label);
for(p=grp.vset[i].link; p!=NULL; p=p->next){
printf("%c",p->label);
if(p->next !=NULL) printf("->");
}
printf("\n");
}
}
#include<stdio.h>
#include<stdlib.h>
#define VMAX 10
struct edge
{
char label;
struct edge *next;
};
struct vertex
{
char label;
struct edge *link;
};
struct graph
{
int v,e;
struct vertex vset[VMAX];
};
//点対(枝)をグラフに追加する関数
void add(struct vertex* g, char e)
{
struct edge* nnode;
//枝の行先を追加する位置を探す
struct edge** node=&g->link;
while(*node!=NULL && (*node)->label<e){
node=&(*node)->next;
}
//枝を追加する
nnode=malloc(sizeof(*nnode)); //新しいノードを用意し、
if(nnode==NULL){
perror("malloc");
exit(1);
}
nnode->label=e; //値を設定する
nnode->next=*node; //新しいノードのnextが、追加したい位置の次のノードを指すようにする
*node=nnode; //追加したい位置の前のノードのnextが、新しいノードを指すようにする
}
int main()
{
struct graph grp;
int i,n;
char c1,c2;
struct edge *head,*p;
for(i=0;i<VMAX;i++)grp.vset[i].link=NULL;
//点数読み込み
grp.v=scanf("%d%*c",&n);
grp.v=n;
printf("\n");
//点ラベルを読み込み
for(i=0;i<n;i++){
char c; //定義されていなかったので、定義する
scanf("%c%*c",&c);
grp.vset[i].label=c;
}
printf("\n");
//枝数読み込み
grp.e=scanf("%d%*c",&n);
grp.e=n;
printf("\n");
//点ラベル対(枝)を読み込み
for(i=0;i<n;i++){
int v1=-1,v2=-1,j;
scanf("%c%*c %c%*c",&c1,&c2);
//どの点に枝を追加するかを探す
for(j=0; j<grp.v; j++){
if(grp.vset[j].label==c1)v1=j;
if(grp.vset[j].label==c2)v2=j;
}
if(v1<0 || v2<0){
fputs("invalid edge exists\n", stderr);
return 1;
}
//枝を追加する
add(&grp.vset[v1],c2);
add(&grp.vset[v2],c1);
}
//グラフの確認
for(i=0;i<grp.v;i++){
printf("[%c]:",grp.vset[i].label);
for(p=grp.vset[i].link; p!=NULL; p=p->next){
printf("%c",p->label);
if(p->next !=NULL) printf("->");
}
printf("\n");
}
}