Maxim_Leo

Untitled

May 4th, 2022
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <fstream>
  7. #include <boost/graph/graphviz.hpp>
  8. #include <boost/graph/adjacency_list.hpp>
  9. #include <boost/graph/iteration_macros.hpp>
  10. #define _SCL_SECURE_NO_WARNINGS
  11. using namespace std;
  12.  
  13. int main()
  14. {
  15. setlocale(LC_ALL, "Russian");
  16. ifstream in("input.txt");
  17. ofstream out("output.txt");
  18. out << "graph G {" << endl;
  19. int m;//кол-во ребер
  20. int n;//кол-во вершин
  21. in >> n;
  22. in >> m;
  23. int x, y, z;//считываем дуги и вес
  24. vector < pair < int, pair<int, int> > > g(m); // вес - вершина 1 - вершина 2
  25.  
  26. vector < pair < int, pair<int, int> > > res;//массив для хранения дуг остовного дерева и их весов
  27.  
  28.  
  29. for (int i = 0; i < m; i++)
  30. {
  31. in >> x >> y >> z;
  32. g[i].first = z;
  33. g[i].second.first = x;
  34. g[i].second.second = y;
  35. }
  36. int tree_weight = 0;
  37.  
  38. sort(g.begin(), g.end());
  39.  
  40. vector<int> tree_id(n);
  41.  
  42. for (int i = 1; i < n; i++) {
  43. tree_id.push_back(NULL);
  44. }
  45. for (int i = 0; i < m; i++) {
  46. res.push_back(make_pair(NULL, make_pair(NULL, NULL)));
  47. }
  48. for (int i = 1; i < n; ++i)
  49. tree_id[i] = i;
  50. for (int i = 0; i < m; ++i)
  51. {
  52. int a = g[i].second.first, b = g[i].second.second, l = g[i].first;
  53. if (tree_id[a] != tree_id[b])
  54. {
  55. tree_weight += l;
  56. res[i].first = l;
  57. res[i].second=(make_pair(a, b));
  58. int old_id = tree_id[b], new_id = tree_id[a];
  59. for (int j = 1; j < n+1; ++j)
  60. if (tree_id[j] == old_id)
  61. tree_id[j] = new_id;
  62. }
  63. }
  64. cout << "Ребра минимального остовного дерева: " << endl;
  65. for (int i = 0; i < res.size(); i++) {
  66.  
  67. if (res[i].second.first != NULL) { //[label=1, weight=1];
  68. out << res[i].second.first << " -- " << res[i].second.second << " " << "[label=" << res[i].first << "];" << endl;
  69. cout << res[i].second.first << " , " << res[i].second.second << " " << res[i].first << endl;
  70. }
  71.  
  72. }
  73. cout << endl;
  74. for (int i = 0; i < tree_id.size(); i++) {
  75. if(tree_id[i])
  76. cout << tree_id[i];
  77. }
  78. cout << endl;
  79. in.close();
  80. out << "}";
  81. out.close();
  82. cout << "Вес минимального остовного дерева: "<< tree_weight <<endl;
  83. system("dot output.txt -Tpng -og.png");
  84. }
  85.  
  86.  
  87.  
Advertisement
Add Comment
Please, Sign In to add comment