illfate

Untitled

Mar 31st, 2019
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <set>
  4. #include <vector>
  5. #include <iterator>
  6.  
  7. using namespace std;
  8.  
  9. const int Vmax = 100, Emax = Vmax * 2;
  10.  
  11. struct Graph
  12. {
  13. Graph():head(Vmax),next_el(Emax),k(0){}
  14. vector < set < int > > terminal;
  15. vector<int> head;
  16. vector<int> next_el;
  17. int k;
  18. int n=0;
  19. };
  20. //set <int> terminal;
  21. //int terminal[Emax]; //хранит вершины, в которые входят ребра;
  22.  
  23. string line;
  24.  
  25. void Add(int v, int u,Graph& g) //добавление ребра
  26. {
  27. g.k = g.k + 1;
  28. g.terminal[g.k].insert(u); //указатель куда идет ребро. Пример: 1 4<-на этот элемент
  29. g.next_el[g.k] = g.head[v]; // если один раз будет вершина, то next_el будет равен 0
  30. g.head[v] = g.k; //указатель вершины
  31. }
  32.  
  33.  
  34. void Read(const string& file_name,Graph& g) {
  35. int size = 1;
  36. int n, m;
  37. ifstream file(file_name);
  38. while (!file.eof()) {
  39. file >> n; //кол-во вершин
  40. file >> m; //кол-во ребер
  41. g.n = n;
  42. size += n;
  43. size += n;
  44. g.terminal.resize(size);
  45. for (int i = 0; i < m; i++)
  46. {
  47. int v, u;
  48. file >> v >> u;
  49. Add(v, u, g);
  50. Add(u, v, g);
  51. }
  52. }
  53. file.close();
  54. }
  55.  
  56. vector<set<int>> Solve(Graph& g) {
  57. vector<set<int>> data;
  58. //cout << "Список смежности графа:";
  59. int j = 0;
  60. for (int i = 0; i < g.n + 1; i++)
  61. {
  62. set<int> temp;
  63. j = g.head[i];
  64. //if (i) cout << i << "->"; //if(i) -> если x не равно 0
  65. while (j > 0)
  66. {
  67. if (!g.next_el[j]) {
  68. for (int x : g.terminal[j]) {
  69. //cout << x << ", ";
  70. temp.insert(x);
  71. }
  72. } //(!next) -> если next = 0
  73. else {
  74. for (int x : g.terminal[j]) {
  75. //cout << x << ", ";
  76. temp.insert(x);
  77. }
  78. }
  79. j = g.next_el[j];
  80. }
  81. //cout << endl;
  82. data.push_back(temp);
  83. }
  84. return data;
  85. }
  86.  
  87. void PrintSolution(const vector<set<int>>& data) {
  88. int counter = 0;
  89. for (const auto& line : data) {
  90. if (counter) cout << counter << "->"; //if(counter) -> если counter не равно 0
  91. for (int x : line) {
  92. cout << x << " ";
  93. }
  94. if (counter) cout << endl;
  95. counter++;
  96. }
  97. }
  98.  
  99. int main()
  100. {
  101. Graph g;
  102. Read("second.txt", g);
  103. PrintSolution(Solve(g));
  104.  
  105. }
Advertisement
Add Comment
Please, Sign In to add comment