ZOJ 1406 Jungle Roads (最小生成树)

来源:互联网 发布:淘宝一元秒杀网址 编辑:程序博客网 时间:2024/04/30 23:29

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406

最小生成成树之Prim算法

#include <iostream>#include <vector>#include <algorithm>#include <queue>#include <string.h>#include <stdio.h>using namespace std;int Prim(int a[][26], int n){int cost = 0;vector<int> known;known.push_back(0);// Add first nodebool bKnown[26];memset(bKnown, false, sizeof(bKnown));bKnown[0] = true;while (known.size() < n){int minCost = 101;int minNodeId;for (vector<int>::iterator it = known.begin(); it != known.end(); it++)for (int i = 0; i < n; i++)if (a[*it][i] > 0 && a[*it][i] < minCost && bKnown[i] == false){minCost = a[*it][i];minNodeId = i;}known.push_back(minNodeId);bKnown[minNodeId] = true;cost += minCost;}return cost;}int main(){int n;int a[26][26];while (cin >> n && n > 0){memset(a, 0, sizeof(a));for (int i = 0; i < n - 1; i++){char from, to;int k, cost;cin >> from >> k;for (int j = 0; j < k; j++){cin >> to >> cost;a[from - 'A'][to - 'A'] = cost;a[to - 'A'][from - 'A'] = cost;}}cout << Prim(a, n) << endl;}}


原创粉丝点击