Advertisement
Shiyan12

Untitled

Jun 29th, 2021
1,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4.  
  5. #define forn(i, n) for (int i = 0; i < n; ++i)
  6.  
  7. using namespace std;
  8.  
  9. int main() {
  10.     setlocale(LC_ALL, "rus");
  11.    
  12.     ifstream rd;
  13.     rd.open("graph.txt");
  14.     int n, m; // n - кол-во вершин, m - кол-во рёбер
  15.     rd >> n >> m;
  16.     vector <vector <int>> g(n); // граф (в памяти компьютера будет храниться в виде матрицы смежности)
  17.     forn(i, n)
  18.         g[i].resize(n, 0);
  19.     forn(i, n) {
  20.         int u, v;
  21.         rd >> u >> v;
  22.         --u;
  23.         --v;
  24.         g[u][v] = g[v][u] = i+1;
  25.     }
  26.     rd.close();
  27.  
  28.     vector <vector <int>> r(m);
  29.     forn(i, m)
  30.         r[i].resize(m, 0);
  31.     forn(i, n) {
  32.         forn(j, n) {
  33.             forn(k, n) {
  34.                 if (g[i][k] * g[j][k] > 0)
  35.                     r[g[i][k] - 1][g[j][k] - 1] = r[g[j][k] - 1][g[i][k] - 1] = 1;
  36.             }
  37.         }
  38.     }
  39.    
  40.     vector <int> res;
  41.     bool flag = true;
  42.     while (flag) {
  43.         int x = 0, y = 0;
  44.         flag = false;
  45.         forn(i, m) {
  46.             forn(j, m) {
  47.                 if (r[i][j] == 1) {
  48.                     r[i][j] = r[j][i] = 0;
  49.                     x = i;
  50.                     y = j;
  51.                     res.push_back(x+1);
  52.                     if (y != x)
  53.                         res.push_back(y+1);
  54.                     flag = true;
  55.                     break;
  56.                 }
  57.             }
  58.             if (flag)
  59.                 break;
  60.         }
  61.         forn(i, m) {
  62.             if (r[i][x] == 1)
  63.                 r[i][x] = r[x][i] = 0;
  64.             if (r[i][y] == 1)
  65.                 r[i][y] = r[y][i] = 0;
  66.         }
  67.     }
  68.  
  69.     for (int edge : res) {
  70.         forn(i, n) {
  71.             int j;
  72.             for (j = 0; j < n; ++j) {
  73.                 if (g[i][j] == edge && i != j) {
  74.                     cout << i + 1 << '-' << j + 1 << endl;
  75.                     break;
  76.                 }
  77.             }
  78.             if (j < n)
  79.                 break;
  80.         }
  81.     }
  82.  
  83.     system("pause");
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement