Okorosso

конвертер графов

Jun 16th, 2021
737
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. int main() {
  9.  
  10.     ifstream fin("input.txt");
  11.     ofstream fout("output.txt");
  12.  
  13.  
  14.     string first, second;
  15.     fin >> first >> second;
  16.     int n, m;
  17.     int num1, num2;
  18.     if (first == "edges") {
  19.         if (second == "mat") {
  20.             fin >> n >> m;
  21.             vector<vector<int>> arr(n, vector<int>(n));
  22.             for (int i = 0; i < n; i++) {
  23.                 for (int j = 0; j < n; j++) {
  24.                     arr[i][j] = 0;
  25.                 }
  26.             }
  27.             for (int i = 0; i < m; i++) {
  28.                 fin >> num1 >> num2;
  29.                 num1--;
  30.                 num2--;
  31.                 arr[num1][num2] = 1;
  32.             }
  33.             fout << n << '\n';
  34.             for (int i = 0; i < n; i++) {
  35.                 for (int j = 0; j < n; j++) {
  36.                     fout << arr[i][j] << " ";
  37.                 }
  38.                 fout << '\n';
  39.             }
  40.         } else if (second == "lists") {
  41.             fin >> n >> m;
  42.             vector<vector<int>> mas(n);
  43.             for (int i = 0; i < m; i++) {
  44.                 fin >> num1 >> num2;
  45.                 num1--;
  46.                 mas[num1].push_back(num2);
  47.  
  48.             }
  49.             for (int i = 0; i < mas.size(); i++)
  50.                 sort(mas[i].begin(), mas[i].end());
  51.             fout << mas.size() << '\n';
  52.  
  53.             for (int i = 0; i < n; i++) {
  54.                 fout << mas[i].size() << " ";
  55.                 for (int j = 0; j < mas[i].size(); j++) {
  56.  
  57.                     fout << mas[i][j] << " ";
  58.                 }
  59.                 fout << '\n';
  60.             }
  61.         } else {
  62.             int a;
  63.             fin >> n >> m;
  64.             fout << n << " " << m << '\n';
  65.             for (int i = 0; i < m; i++) {
  66.                 fin >> a;
  67.                 fout << a << " ";
  68.                 fin >> a;
  69.                 fout << a << '\n';
  70.  
  71.             }
  72.         }
  73.     } else if (first == "mat") {
  74.         fin >> num1;
  75.         int a;
  76.         vector<vector<int>> mas(num1);
  77.         if (second == "lists") {
  78.             for (int i = 0; i < num1; i++) {
  79.                 for (int j = 0; j < num1; j++) {
  80.                     fin >> a;
  81.                     if (a) {
  82.                         mas[i].push_back(j + 1);
  83.                     }
  84.                 }
  85.             }
  86.             fout << num1 << '\n';
  87.             for (int i = 0; i < mas.size(); i++)
  88.                 sort(mas[i].begin(), mas[i].end());
  89.  
  90.             for (int i = 0; i < num1; i++) {
  91.                 fout << mas[i].size() << " ";
  92.                 for (int j = 0; j < mas[i].size(); j++) {
  93.  
  94.                     fout << mas[i][j] << " ";
  95.                 }
  96.                 fout << '\n';
  97.             }
  98.         } else if (second == "edges") {
  99.             vector<int> vec;
  100.             for (int i = 0; i < num1; i++) {
  101.                 for (int j = 0; j < num1; j++) {
  102.                     fin >> a;
  103.                     if (a == 1) {
  104.                         vec.push_back(i + 1);
  105.                         vec.push_back(j + 1);
  106.                     }
  107.                 }
  108.             }
  109.             fout << num1 << " " << vec.size() / 2 << '\n';
  110.             for (int i = 0; i < vec.size(); i += 2) {
  111.                 fout << vec[i] << " " << vec[i + 1] << '\n';
  112.             }
  113.         } else {
  114.             fout << num1 << '\n';
  115.             for (int i = 0; i < num1; i++) {
  116.                 for (int j = 0; j < num1; j++) {
  117.                     fin >> a;
  118.                     fout << a << " ";
  119.                 }
  120.                 fout << '\n';
  121.             }
  122.         }
  123.     } else if (first == "lists") {
  124.         bool flag = true;
  125.         int a;
  126.         fin >> num1;
  127.         vector<vector<int>> mas(num1, vector<int>(num1));
  128.         if (second == "mat") {
  129.             fout << num1 << '\n';
  130.             for (int i = 0; i < num1; i++) {
  131.                 int size;
  132.                 fin >> size;
  133.                 for (int j = 0; j < num1; j++) {
  134.                     if (flag && size != 0) {
  135.                         fin >> a;
  136.                         flag = false;
  137.                         size--;
  138.                     }
  139.                     if (j == a - 1) {
  140.                         flag = true;
  141.                         mas[i][j] = 1;
  142.                         a = -1;
  143.                     } else
  144.                         mas[i][j] = 0;
  145.  
  146.                     fout << mas[i][j] << " ";
  147.                 }
  148.                 fout << '\n';
  149.             }
  150.         } else if (second == "edges") {
  151.             int size;
  152.             vector<int> vec;
  153.             for (int i = 0; i < num1; i++) {
  154.                 fin >> size;
  155.                 for (int j = 0; j < size; j++) {
  156.                     fin >> a;
  157.                     vec.push_back(i + 1);
  158.                     vec.push_back(a);
  159.  
  160.                 }
  161.             }
  162.             fout << num1 << " " << vec.size() / 2 << '\n';
  163.             for (int i = 0; i < vec.size(); i += 2) {
  164.                 fout << vec[i] << " " << vec[i + 1] << '\n';
  165.             }
  166.         } else {
  167.             fout << num1 << '\n';
  168.             int size;
  169.             for (int j = 0; j < num1; j++) {
  170.                 fin >> size;
  171.                 fout << size << " ";
  172.                 for (int i = 0; i < size; i++) {
  173.                     fin >> a;
  174.                     fout << a << " ";
  175.                 }
  176.                 fout << '\n';
  177.             }
  178.         }
  179.     }
  180.  
  181.     return 0;
  182. }
RAW Paste Data