求无向图G中各顶点的度。建议分别采用邻接矩阵和邻接表这两种不同的存储结构完成。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试第一行输入2个整数n、m(2≤n≤26,1≤m≤n(n-1)/2),分别表示顶点数、边数;然后输入m行,每行包含两个顶点Ai、Bi(大写字母表示),表示Ai和Bi之间有一条边。
输出格式:
对于每组测试,在一行上依顶点的字典序输出各顶点的度,每两个数据之间留一个空格。
输入样例:
1
5 4
A C
A B
B D
E C
输出样例:
2 2 2 1 1
来源:
[1] 黄龙军, 等. 数据结构与算法, 上海:上海交通大学出版社, 2022.7. ISBN: 9787313269881
[2] 黄龙军, 等. 数据结构与算法(Python版),上海: 上海交通大学出版社, 2023. ISBN: 9787313280732
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX 26typedef struct Node
{int ve;struct Node *n;
} Node;typedef struct Graph
{int num;Node **adj;
} Graph;Node *createn(int v)
{Node *new = (Node *)malloc(sizeof(Node));new->ve = v;new->n = NULL;return new;
}Graph *createg(int vertices)
{Graph *graph = (Graph *)malloc(sizeof(Graph));graph->num = vertices;graph->adj = (Node **)malloc(vertices * sizeof(Node *));for (int i = 0; i < vertices; i++){graph->adj[i] = NULL;}return graph;
}void add(Graph *graph, int src, int dest)
{Node *new = createn(dest);new->n = graph->adj[src];graph->adj[src] = new;new = createn(src);new->n = graph->adj[dest];graph->adj[dest] = new;
}void print(Graph *graph)
{int de[MAX] = {0};for (int i = 0; i < graph->num; i++){Node *temp = graph->adj[i];while (temp){de[i]++;temp = temp->n;}}for (int i = 0; i < graph->num; i++){printf("%d ", de[i]);}printf("\n");
}int main()
{int T;scanf("%d", &T);while (T--){int n, m;scanf("%d %d", &n, &m);Graph *graph = createg(n);for (int i = 0; i < m; i++){char u, v;scanf(" %c %c", &u, &v);add(graph, u - 'A', v - 'A');}print(graph);}return 0;
}