项目作者: MitI-7

项目描述 :
Enumerating All Minimum Spanning Trees of Undirected Graphs
高级语言: C++
项目地址: git://github.com/MitI-7/EnumeratingAllMinimumSpanningTrees.git
创建时间: 2019-05-16T02:08:26Z
项目社区:https://github.com/MitI-7/EnumeratingAllMinimumSpanningTrees

开源协议:MIT License

下载


Enumerating All Minimum Spanning Trees

Overview

Given an weighted graph, minimum spanning trees may not be unique.
This program lists all the minimum spanning trees included in the weighted graph.

Usage

  1. const int num_node = 6;
  2. AllMinimumSpanningTrees amst(num_node);
  3. // add_undirected_edge(int node_name1, int node_name2, int cost, int edge_name);
  4. amst.add_undirected_edge(1, 2, 2, 1);
  5. amst.add_undirected_edge(1, 3, 1, 2);
  6. amst.add_undirected_edge(2, 3, 3, 3);
  7. amst.add_undirected_edge(2, 4, 1, 4);
  8. amst.add_undirected_edge(3, 4, 2, 5);
  9. amst.add_undirected_edge(3, 5, 2, 6);
  10. amst.add_undirected_edge(4, 5, 1, 7);
  11. amst.add_undirected_edge(4, 6, 3, 8);
  12. amst.add_undirected_edge(5, 6, 3, 9);
  13. bool ok = amst.build();
  14. if (not ok) {
  15. return;
  16. }
  17. set<vector<int>> ans = amst.generate_all_minimum_spanning_trees();
  18. cout << "#minimum spanning tree: " << ans.size() << endl;
  19. cout << "minimum cost: " << amst.minimum_cost << endl;
  20. int no = 1;
  21. for (const vector<int> &v : ans) {
  22. cout << "no:" << no++ << endl;
  23. for (int edge_idx = 0; edge_idx < v.size(); ++edge_idx) {
  24. if (v[edge_idx]) {
  25. const UnDirectedEdge &edge = amst.get_edge(edge_idx);
  26. cout << edge.info() << endl;
  27. }
  28. }
  29. cout << endl;
  30. }

output

  1. #minimum spanning tree: 6
  2. minimum cost: 8
  3. no:1
  4. edge:4(2-4,cost:1)
  5. edge:7(4-5,cost:1)
  6. edge:2(1-3,cost:1)
  7. edge:5(3-4,cost:2)
  8. edge:8(4-6,cost:3)
  9. no:2
  10. edge:4(2-4,cost:1)
  11. edge:7(4-5,cost:1)
  12. edge:2(1-3,cost:1)
  13. edge:1(1-2,cost:2)
  14. edge:8(4-6,cost:3)
  15. no:3
  16. edge:6(3-5,cost:2)
  17. edge:4(2-4,cost:1)
  18. edge:7(4-5,cost:1)
  19. edge:2(1-3,cost:1)
  20. edge:8(4-6,cost:3)
  21. no:4
  22. edge:9(5-6,cost:3)
  23. edge:4(2-4,cost:1)
  24. edge:7(4-5,cost:1)
  25. edge:2(1-3,cost:1)
  26. edge:5(3-4,cost:2)
  27. no:5
  28. edge:9(5-6,cost:3)
  29. edge:4(2-4,cost:1)
  30. edge:7(4-5,cost:1)
  31. edge:2(1-3,cost:1)
  32. edge:1(1-2,cost:2)
  33. no:6
  34. edge:9(5-6,cost:3)
  35. edge:6(3-5,cost:2)
  36. edge:4(2-4,cost:1)
  37. edge:7(4-5,cost:1)
  38. edge:2(1-3,cost:1)

Experiments

Complete graphs with constant edge weights

Graph #MST’s Time(sec)
K3 3 0
K4 16 0
K5 125 0
K6 1269 0
K7 16807 0
K8 262144 0
K9 4782969 12
K10 100000000 379

Complete graphs with random edge weights

L Graph #MST’s Time(sec)
2 K20 1 2
K40 48 0
K60 6073 0
3 K20 1 0
K40 1 0
K60 2 0
K80 2 0
K100 8 0
K120 65 0
K140 100 0
K160 3832 0
K180 4115 0
K200 6004 2

References