题目描述
根据输入的顶点和边的相关信息构造一个带权的图也就是网,并应用Kruskal算法生成它的一棵最小生成树,设该生成树首个被访问的顶点为构造带权图时所输入的第一个顶点。若该图是连通的,则依次输出最小生成树的各条边的信息和权值和;否则输出ERROR。
输入
第一行为一个整数v(1≤v≤20),表示图的顶点个数;第二行有v个字符,分别表示v个顶点所显示的数据,各个顶点显示的数据互不相同;第三行为一个整数e(1≤e≤100),表示图的边的数量;接下来有e行,每行包括一个字符串(无空格,长度不超过30),分别表示图中某条边的起始顶点、终止顶点、边的权值。
输出
若该图是连通的,则依次输出最小生成树的各条边的信息,之后空一行再输出各条边的权值之和;否则输出ERROR。
样例输入
6 A B C D E F 10 A,B:6 A,C:1 A,D:5 B,C:5 B,E:3 C,D:5 C,E:6 C,F:4 D,F:2 E,F:6
样例输出
A,C:1 D,F:2 B,E:3 C,F:4 B,C:5 15
提示
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VERTICES 20
#define MAX_EDGES 100
// 定义边的结构体
typedef struct {
int start;
int end;
int weight;
}