Advertisement
scottish_esquire

Задача № 3. Получи дерево.

Apr 27th, 2022
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. // Дан связный неориентированный граф без петель и кратных ребер. Разрешается удалять из него ребра. Требуется получить дерево.
  5. // Решаем через поиск в глубину.
  6.  
  7.  
  8. void dfs(int v, int n, std::vector<int> &used, std::vector<std::vector<int>> &g) {
  9.     used[v] = 1;
  10.     for (int i = 1; i <= n; i++) {
  11.         if ((g[v][i] == 1) && (used[i] == 0)) {
  12.             std::cout << v << " " << i << std::endl;
  13.             dfs(i, n, used, g);
  14.         }
  15.     }
  16. }
  17.  
  18. int main() {
  19.     int n = 0, m = 0; // n, m - кол-во вершин, рёбер соответственно.
  20.     std::cin >> n >> m;
  21.     std::vector<std::vector<int>> g(n + 1, std::vector<int> (n + 1, 0));
  22.     for (size_t i = 0; i < m; ++i) {
  23.         int f = 0, t = 0;
  24.         std::cin >> f >> t; // Концы одного ребра, нумерация начинается с 1.
  25.         g[f][t] = 1;
  26.         g[t][f] = 1;
  27.     }
  28.     std::vector<int> used(n + 1); // Вершины, в которых мы уже побывали.
  29.     std::cout << std::endl;
  30.     dfs(1, n, used, g);
  31.     return 0;
  32. }
  33.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement