最小生成树

【问题描述】
现有一设计师要在n(0【输入要求】
输入包含多组测试数据,每组测试数据的第一行是城市的个数n,接下来的每一行包括三个数据分别是两个城市的编号和它们之间的距离,每组数据测试以三个0结束。
【输出要求】
对于每组输入数据,输出建设通信网络的最小花费,每个测试实例占一行。
【样例输入】
6
1 2 6
1 3 1
1 4 5
2 3 5
2 5 3
3 4 5
3 5 6
3 6 4
4 6 2
5 6 6
0 0 0
【样例输出】
15

 


#include #include using namespace std; typedef struct Edge { int key; //边的权值 int u; //与边关联的两个顶点 int v; }Edge; bool cmp(const Edge& e1, const Edge& e2) { return e1.key < e2.key; } Edge edges[200]; int nodes[20]; int n, m; int lowcost; int FindRoot(int v) { while(nodes[v] != -1) v = nodes[v]; return v; } void Solve() { sort(edges, edges + m, cmp); memset(nodes, 0xff, sizeof(nodes)); int c_edge = 0; lowcost = 0; int i = 0; while(i < m && c_edge < n - 1) { if(FindRoot(edges[i].u) != FindRoot(edges[i].v)) { nodes[edges[i].v] = edges[i].u; c_edge ++; lowcost += edges[i].key; } i ++; } cout << lowcost << endl; } int main() { while(cin >> n) { int u, v, k, i = 0; m = 0; while(cin >> u >> v >> k) { if(!u && !v && !k) break; m ++; edges[i].u = u, edges[i].v = v, edges[i ++].key = k; } Solve(); } return 0; }

你可能感兴趣的:(测试,网络,struct,c,数据结构和算法设计实验课)