Advertisement
zodiak1

Untitled

May 11th, 2022
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <stack>
  5. #include <queue>
  6. #include <set>
  7. #include <conio.h> //
  8. #include <windows.h>
  9.  
  10. using namespace std;
  11.  
  12. size_t DFS(vector<vector<bool>> &graph);
  13. size_t BFS(vector<vector<bool>> &graph);
  14.  
  15. void generate_tree(ULONGLONG v_count);
  16.  
  17.  
  18. int main()
  19. {
  20. setlocale(0, ""); //
  21. generate_tree(30000);
  22.  
  23. ULONGLONG V, E;
  24.  
  25. ifstream in("info.txt");
  26. if (!in.is_open())
  27. {
  28. cerr << "Не удалось открыть файл info";
  29. return -1;
  30. }
  31. in >> V >> E;
  32.  
  33.  
  34. in = ifstream("in.txt");
  35. if (!in.is_open())
  36. {
  37. cerr << "Не удалось открыть файл in";
  38. return -1;
  39. }
  40.  
  41.  
  42. vector<vector<bool>> graph(V);
  43. for (ULONGLONG i = 0; i < V; i++)
  44. graph[i].resize(V);
  45.  
  46. for (ULONGLONG i = 0; i < E; i++)
  47. {
  48. ULONGLONG r, c;
  49. in >> r >> c;
  50.  
  51. graph[r][c] = true;
  52. graph[c][r] = true;
  53. }
  54.  
  55.  
  56. ofstream out = ofstream("out.txt");
  57.  
  58. clock_t s = clock(); //
  59. if (V - DFS(graph) == 0)
  60. {
  61. clock_t t = clock() - s; //
  62. cout << t / 1000 << "." << t % 1000 << "s" << endl; //
  63.  
  64. if (E == V - 1)
  65. out << "Дерево." << endl;
  66. else out << "Не дерево: есть цикл." << endl;
  67. }
  68. else out << "Не дерево: компонент связности больше 1." << endl;
  69.  
  70. return 0 * _getch(); //
  71. }
  72.  
  73.  
  74. size_t DFS(vector<vector<bool>> &graph)
  75. {
  76. ULONGLONG x = 0, y = 0; //
  77.  
  78. set<ULONGLONG> set;
  79. stack<ULONGLONG> stack;
  80.  
  81. stack.push(0);
  82.  
  83. while (!stack.empty())
  84. {
  85. y++; //
  86. bool down = false;
  87.  
  88. int r = stack.top();
  89. set.insert(r);
  90.  
  91. for (int c = r; c < graph.size() && !down; c++, x++) //
  92. if (down = graph[r][c] == 1 && set.count(c) == 0)
  93. stack.push(c);
  94.  
  95. x--; //
  96. if (!down) stack.pop();
  97. }
  98.  
  99. cout << "Итераций внешнего цикла: " << y << ", итераций вложенного цикла: " << x << endl; //
  100.  
  101. return set.size();
  102. }
  103.  
  104. size_t BFS(vector<vector<bool>> &graph)
  105. {
  106. ULONGLONG x = 0, y = 0; //
  107.  
  108. set<ULONGLONG> set;
  109. queue<ULONGLONG> queue;
  110.  
  111. queue.push(0);
  112.  
  113. while (!queue.empty())
  114. {
  115. y++; //
  116. ULONGLONG r = queue.front();
  117.  
  118. set.insert(r);
  119. queue.pop();
  120.  
  121. for (int c = 0; c < graph.size(); c++, x++)//
  122. if (graph[r][c] == 1 && set.count(c) == 0)
  123. queue.push(c);
  124.  
  125. x--; //
  126. }
  127.  
  128. cout << "Итераций внешнего цикла: " << y << ", итераций вложенного цикла: " << x << endl; //
  129.  
  130. return set.size();
  131. }
  132.  
  133. void generate_tree(ULONGLONG v_count)
  134. {
  135. ofstream out("info.txt");
  136. out << v_count << ' ' << v_count - 1 << endl;
  137.  
  138. out = ofstream("in.txt");
  139.  
  140. ULONGLONG v_num = 0, dif = 1;
  141. for (ULONGLONG i = 0; i < v_count - 1; i++)
  142. {
  143. out << v_num << ' ' << dif++ << endl;
  144. v_num += dif % 2;
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement