怎么在int main()测试函数中,给出该代码的测试数据:void CreateMGraph(MGraph &H) //创建邻接矩阵(有向图) { int i, j, k, w; printf("请输入顶点数和边数:\n"); scanf("%d %d", &H.n, &H.e); printf("请输入顶点信息:\n"); for (i = 0; i < H.n; i++) { scanf("%d", &H.vexs[i].info); H.vexs[i].no = i; } for (i = 0; i < H.n; i++) { for (j = 0; j < H.n; j++) { H.edges[i][j] = -1; //默认没有边,权值为-1 } } printf("请输入每条边的起点、终点和权值:\n"); for (k = 0; k < H.e; k++) { scanf("%d %d %d", &i, &j, &w); H.edges[i][j] = w; //i指向j,权值为w } }
时间: 2024-01-07 17:03:53 浏览: 100
你可以在 int main() 函数中按照以下方式测试 CreateMGraph() 函数:
```c++
int main() {
MGraph G;
CreateMGraph(G); // 创建邻接矩阵(有向图)
printf("顶点信息:\n");
for (int i = 0; i < G.n; i++) {
printf("%d ", G.vexs[i].info);
}
printf("\n邻接矩阵:\n");
for (int i = 0; i < G.n; i++) {
for (int j = 0; j < G.n; j++) {
printf("%d ", G.edges[i][j]);
}
printf("\n");
}
return 0;
}
```
然后你可以输入以下测试数据:
```
请输入顶点数和边数:
5 6
请输入顶点信息:
1 2 3 4 5
请输入每条边的起点、终点和权值:
0 1 1
0 2 2
1 2 3
1 3 4
2 4 5
3 4 6
```
这样就可以测试 CreateMGraph() 函数是否正常工作了。
相关问题
给出该代码的测试函数,且测试函数内带有测试数据:void CreateMGraph(MGraph &H) //创建邻接矩阵(有向图) { int i, j, k, w; printf("请输入顶点数和边数:\n"); scanf("%d %d", &H.n, &H.e); printf("请输入顶点信息:\n"); for (i = 0; i < H.n; i++) { scanf("%d", &H.vexs[i].info); H.vexs[i].no = i; } for (i = 0; i < H.n; i++) { for (j = 0; j < H.n; j++) { H.edges[i][j] = -1; //默认没有边,权值为-1 } } printf("请输入每条边的起点、终点和权值:\n"); for (k = 0; k < H.e; k++) { scanf("%d %d %d", &i, &j, &w); H.edges[i][j] = w; //i指向j,权值为w } }
以下是一个简单的测试函数,用于测试CreateMGraph函数:
```c++
void testCreateMGraph() {
MGraph H;
CreateMGraph(H);
printf("邻接矩阵:\n");
for (int i = 0; i < H.n; i++) {
for (int j = 0; j < H.n; j++) {
printf("%d ", H.edges[i][j]);
}
printf("\n");
}
}
```
测试数据:
```
输入:
4 5
1 2 3 4
0 1 2
0 2 1
1 3 4
2 1 1
2 3 1
```
输出:
```
邻接矩阵:
-1 2 1 -1
-1 -1 -1 4
-1 1 -1 1
-1 -1 -1 -1
```
给出一个测试函数,里面有随机一组测试数据:void CreateMGraph(MGraph &H) //创建邻接矩阵 (无向图) { int i, j, k, w; printf("请输入顶点数和边数:\n"); scanf("%d %d", &H.n, &H.e); printf("请输入顶点信息:\n"); for (i = 0; i < H.n; i++) { scanf("%s", &H.vexs[i].info); //s or d? H.vexs[i].no = i; } for (i = 0; i < H.n; i++) { for (j = 0; j < H.n; j++) { H.edges[i][j] = -1; } } printf("请输入每条边的起点、终点和权值:\n"); for (k = 0; k < H.e; k++) { char c1,c2; scanf("%c %c %d", &c1, &c2, &w); //s or d i = c1-'A'; j = c2-'A'; H.edges[i][j] = w; H.edges[j][i] = w; //无向图,所以要将两个方向都存储 } }
这个函数是用来创建一个邻接矩阵表示的无向图,其中包括顶点信息、边的起点和终点以及权值。下面是一个完整的测试函数,它会随机生成一个无向图,并输出邻接矩阵表示。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VERTEX_NUM 26 // 最多顶点个数
typedef struct { // 存储顶点信息的结构体
char info;
int no;
} VertexType;
typedef struct { // 存储邻接矩阵的结构体
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
VertexType vexs[MAX_VERTEX_NUM];
int n, e;
} MGraph;
void CreateMGraph(MGraph &H) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d %d", &H.n, &H.e);
printf("请输入顶点信息:\n");
for (i = 0; i < H.n; i++) {
scanf(" %c", &H.vexs[i].info);
H.vexs[i].no = i;
}
for (i = 0; i < H.n; i++) {
for (j = 0; j < H.n; j++) {
H.edges[i][j] = -1;
}
}
printf("请输入每条边的起点、终点和权值:\n");
for (k = 0; k < H.e; k++) {
char c1, c2;
scanf(" %c %c %d", &c1, &c2, &w);
i = c1 - 'A';
j = c2 - 'A';
H.edges[i][j] = w;
H.edges[j][i] = w; // 无向图,所以要将两个方向都存储
}
}
void PrintMGraph(MGraph H) { // 打印邻接矩阵
int i, j;
printf("邻接矩阵为:\n");
for (i = 0; i < H.n; i++) {
for (j = 0; j < H.n; j++) {
printf("%d ", H.edges[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
srand(time(NULL));
G.n = rand() % MAX_VERTEX_NUM + 1;
G.e = G.n * (G.n - 1) / 4;
for (int i = 0; i < G.n; i++) {
G.vexs[i].info = 'A' + i;
G.vexs[i].no = i;
}
for (int i = 0; i < G.n; i++) {
for (int j = i + 1; j < G.n; j++) {
if (rand() % 2 == 0) {
G.edges[i][j] = G.edges[j][i] = rand() % 100 + 1;
G.e++;
}
}
}
PrintMGraph(G);
return 0;
}
```
这个测试函数会随机生成一个顶点数不超过 26 的无向图,并输出邻接矩阵表示。你可以根据需要修改顶点数、边数和权值范围等参数。
阅读全文