Advertisement
xerpi

Problem P62138_ca: Ordenacions topològiques

Dec 20th, 2014
408
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void escriu_solucio(const vector<int> &sp, int n)
  6. {
  7.     if (n > 0) {
  8.         cout << sp[0];
  9.     }
  10.     for (int i = 1; i < n; i++) {
  11.         cout << " " << sp[i];
  12.     }
  13.     cout << endl;
  14. }
  15.  
  16. void ordenatopo(const vector<vector<int> > &dep, vector<int> &ge, vector<int> &sp, int n, int m, int q)
  17. {
  18.     if (q == n) {
  19.         escriu_solucio(sp, n);
  20.     } else {
  21.         for (int i = 0; i < n; i++) {
  22.             if (ge[i] == 0) {
  23.                 for (int j = 0; j < dep[i].size(); j++) {
  24.                     ge[dep[i][j]]--;
  25.                 }
  26.                
  27.                 sp[q] = i;
  28.                 ge[i]--; //Used
  29.                 ordenatopo(dep, ge, sp, n, m, q+1);
  30.                 ge[i]++; //Not used
  31.                 sp[q] = -1;
  32.  
  33.                 for (int j = 0; j < dep[i].size(); j++) {
  34.                     ge[dep[i][j]]++;
  35.                 }
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44.     int n, m;
  45.     cin >> n >> m;
  46.  
  47.     vector<int> ge(n, 0);
  48.     vector<vector<int> > dep(n);
  49.     for (int i = 0; i < m; i++) {
  50.         int first, second;
  51.         cin >> first >> second;
  52.         dep[first].push_back(second);
  53.         ge[second]++;
  54.     }
  55.    
  56.     vector<int> sp(n, -1);
  57.     ordenatopo(dep, ge, sp, n, m, 0);
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement