bingxuan9112

Untitled

Feb 4th, 2021 (edited)
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 11;
  4.  
  5. vector<int> getPermutation(vector<int> T) {
  6.     int n = T.size();
  7.     vector<int> P(n);
  8.     iota(P.begin(), P.end(), 0);
  9.     for (int i = 0; i < n; i++) {
  10.         if (T[i] != i)
  11.             swap(P[T[i]], P[i]);
  12.     }
  13.     return P;
  14. }
  15. vector<vector<int>> cycles(vector<int> P) {
  16.     vector<vector<int>> ans;
  17.     int n = P.size();
  18.     vector<bool> vis(n);
  19.     for (int i = 0; i < n; i++) {
  20.         if (!vis[i]) {
  21.             ans.emplace_back();
  22.             for (int x = i; !vis[x]; x = P[x]) {
  23.                 ans.back().push_back(x);
  24.                 vis[x] = true;
  25.             }
  26.         }
  27.     }
  28.     return ans;
  29. }
  30. int cnt;
  31. void dfs(int i, int n, int now) {
  32.     static int T[maxn];
  33.     if (i == n) {
  34.         ++cnt;
  35.         vector<int> P = getPermutation(vector<int>(T, T+n));
  36.         vector<vector<int>> C = cycles(P);
  37.  
  38.         cout << "T = ";
  39.         for (int i = 0; i < n; i++)
  40.             cout << T[i]+1 << ' ';
  41.         cout << '\t';
  42.         cout << "P = ";
  43.         for (int i = 0; i < n; i++)
  44.             cout << P[i]+1 << ' ';
  45.         cout << '\t';
  46.         for (vector<int> c: C) {
  47.             cout << "( ";
  48.             for (int x: c) cout << x + 1 << ' ';
  49.             cout << ")";
  50.         }
  51.         cout << '\n';
  52.  
  53.         return;
  54.     }
  55.     for (int j = now; j <= i; j++) {
  56.         T[i] = j;
  57.         dfs(i+1, n, j);
  58.     }
  59. }
  60. int main() {
  61.     int n = 4;
  62.     cout << "n = " << n << '\n';
  63.     cnt = 0;
  64.     dfs(0, n, 0);
  65.     cout << "cnt = " << cnt<<'\n';
  66. }
  67.  
Add Comment
Please, Sign In to add comment