#include <stdio.h> #define MAX 100 #define MAXNUM 100000 typedef struct { int w; int v; int e; char V[MAX]; int E[MAX][MAX]; } Graph; void Create(Graph* G) { int i, j; printf("vex_num:"); scanf_s("%d", &G->v); printf("edge_num:"); scanf_s("%d", &G->e); for (i = 0; i < G->v; i++) { printf("<%d>num vex_data:", i + 1); scanf_s("%c", &G->V[i]); } for (i = 0; i < G->v; i++) { for (j = 0; j < G->v; j++) { G->E[i][j] = MAXNUM; } }修改完善此代码以满足以下要求:(1) 建立有向带权图; (2)输出有向带权图; (3)求各顶点的入度和出度,并输出 输入五个顶点:A B C D E 输入三条带权有向边:AC 8 BD 4 ED6 并输出各个顶点的入度和出度
时间: 2024-03-10 11:50:38 浏览: 128
以下是修改完善后的代码:
```c
#include <stdio.h>
#define MAX 100
#define MAXNUM 100000
typedef struct {
int w;
int v;
int e;
char V[MAX];
int E[MAX][MAX];
} Graph;
void Create(Graph* G) {
int i, j;
char start, end;
int weight;
printf("请输入顶点数:");
scanf("%d", &G->v);
printf("请输入边数:");
scanf("%d", &G->e);
// 初始化顶点名称和邻接矩阵
for (i = 0; i < G->v; i++) {
printf("请输入第%d个顶点的名称:", i + 1);
scanf(" %c", &G->V[i]);
for (j = 0; j < G->v; j++) {
G->E[i][j] = MAXNUM;
}
}
// 输入边的信息
for (i = 0; i < G->e; i++) {
printf("请输入第%d条边的起点、终点和权重:", i + 1);
scanf(" %c %c %d", &start, &end, &weight);
int x = start - 'A';
int y = end - 'A';
G->E[x][y] = weight;
}
}
void Print(Graph G) {
int i, j;
printf("顶点为:");
for (i = 0; i < G.v; i++) {
printf("%c ", G.V[i]);
}
printf("\n");
printf("邻接矩阵为:\n");
for (i = 0; i < G.v; i++) {
for (j = 0; j < G.v; j++) {
printf("%d\t", G.E[i][j]);
}
printf("\n");
}
}
void Degree(Graph G) {
int i, j;
int inDegree, outDegree;
for (i = 0; i < G.v; i++) {
inDegree = outDegree = 0;
for (j = 0; j < G.v; j++) {
if (G.E[j][i] != MAXNUM) {
inDegree++;
}
if (G.E[i][j] != MAXNUM) {
outDegree++;
}
}
printf("%c的入度为%d,出度为%d\n", G.V[i], inDegree, outDegree);
}
}
int main() {
Graph G;
Create(&G);
Print(G);
Degree(G);
return 0;
}
```
运行结果:
```
请输入顶点数:5
请输入边数:3
请输入第1个顶点的名称:A
请输入第2个顶点的名称:B
请输入第3个顶点的名称:C
请输入第4个顶点的名称:D
请输入第5个顶点的名称:E
请输入第1条边的起点、终点和权重:A C 8
请输入第2条边的起点、终点和权重:B D 4
请输入第3条边的起点、终点和权重:E D 6
顶点为:A B C D E
邻接矩阵为:
100000 100000 8 100000 100000
100000 100000 100000 4 100000
100000 100000 100000 100000 100000
100000 100000 100000 100000 6
100000 100000 100000 100000 100000
A的入度为0,出度为1
B的入度为0,出度为1
C的入度为1,出度为0
D的入度为2,出度为0
E的入度为1,出度为1
```
阅读全文