Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <fstream>
- #define forn(i, n) for (int i = 0; i < n; ++i)
- using namespace std;
- int main() {
- setlocale(LC_ALL, "rus");
- ifstream rd;
- rd.open("graph.txt");
- int n, m; // n - кол-во вершин, m - кол-во рёбер
- rd >> n >> m;
- vector <vector <int>> g(n); // граф (в памяти компьютера будет храниться в виде матрицы смежности)
- forn(i, n)
- g[i].resize(n, 0);
- forn(i, n) {
- int u, v;
- rd >> u >> v;
- --u;
- --v;
- g[u][v] = g[v][u] = i+1;
- }
- rd.close();
- vector <vector <int>> r(m);
- forn(i, m)
- r[i].resize(m, 0);
- forn(i, n) {
- forn(j, n) {
- forn(k, n) {
- if (g[i][k] * g[j][k] > 0)
- r[g[i][k] - 1][g[j][k] - 1] = r[g[j][k] - 1][g[i][k] - 1] = 1;
- }
- }
- }
- vector <int> res;
- bool flag = true;
- while (flag) {
- int x = 0, y = 0;
- flag = false;
- forn(i, m) {
- forn(j, m) {
- if (r[i][j] == 1) {
- r[i][j] = r[j][i] = 0;
- x = i;
- y = j;
- res.push_back(x+1);
- if (y != x)
- res.push_back(y+1);
- flag = true;
- break;
- }
- }
- if (flag)
- break;
- }
- forn(i, m) {
- if (r[i][x] == 1)
- r[i][x] = r[x][i] = 0;
- if (r[i][y] == 1)
- r[i][y] = r[y][i] = 0;
- }
- }
- for (int edge : res) {
- forn(i, n) {
- int j;
- for (j = 0; j < n; ++j) {
- if (g[i][j] == edge && i != j) {
- cout << i + 1 << '-' << j + 1 << endl;
- break;
- }
- }
- if (j < n)
- break;
- }
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement