c语言输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试第一行输入2个整数n、m(2≤n≤26,1≤m≤n(n-1)/2),分别表示顶点数、边数;然后输入m行,每行包含两个顶点Ai、Bi(大写字母表示),表示Ai到Bi有一条有向边。 输出格式: 对于每组测试,输出n行,依顶点的字典序在每行上输出各顶点的入度和出度(数据之间留一个空格)。
时间: 2024-02-18 11:04:29 浏览: 21
好的,针对您的问题,我可以帮您提供一份 C 语言的代码。
算法思路:
为了方便处理字典序,我们可以将顶点用数字表示,即 A 表示为 1,B 表示为 2,以此类推。然后用邻接矩阵或邻接表存储有向图,统计每个顶点的入度和出度,最后按字典序输出即可。
具体实现:
下面给出基于邻接矩阵的实现代码,您可以参考一下:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 30
// 定义一个转换函数,将大写字母转换为对应的数字
int trans(char c) {
return c - 'A' + 1;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n, m;
scanf("%d%d", &n, &m);
// 初始化邻接矩阵
int adj[MAXN][MAXN] = {0};
// 统计入度、出度
int in_degree[MAXN] = {0};
int out_degree[MAXN] = {0};
for (int i = 0; i < m; ++i) {
char a, b;
scanf(" %c %c", &a, &b);
int u = trans(a), v = trans(b);
adj[u][v] = 1; // 添加边
out_degree[u]++; // 统计出度
in_degree[v]++; // 统计入度
}
// 按字典序输出结果
for (int i = 1; i <= n; ++i) {
printf("%c %d %d\n", i+'A'-1, in_degree[i], out_degree[i]);
}
}
return 0;
}
```
希望以上代码和解释能够帮到您,如果您还有其他问题,可以继续问我哦。