Advertisement
dalvorsn

Untitled

Mar 31st, 2012
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string>
  3. #include <vector>
  4.  
  5. int factorial(int n)
  6. {
  7.     for(int i = n-1; i > 1; --i)
  8.         n *= i;
  9.     return n;
  10. }
  11.  
  12. std::vector<std::string> permutar2(const std::string& text)
  13. {
  14.     std::vector<std::string> permut;
  15.     int factorialLength = factorial(text.length());
  16.     int factorialLength1 = factorial(text.length()-1);
  17.     permut.resize(factorialLength);
  18.  
  19.     if(text.length() == 2) {
  20.         permut.resize(factorialLength);
  21.         for(int i = 0; i < factorialLength; ++i)
  22.             for(int j = 0; j < text.length(); ++j)
  23.                 permut[i] += text[(i+j) % text.length()];
  24.     }
  25.     else {
  26.         for(int i = 0; i < factorialLength; i+=factorialLength1) {
  27.             char letter = text[(i/factorialLength1) % text.length()];
  28.  
  29.             for(int j = 0; j < factorialLength1; ++j)
  30.                 permut[i+j] += letter;
  31.  
  32.             std::string ntext;
  33.             for(int j = 0; j < text.length(); ++j) {
  34.                 if(text[j] != letter)
  35.                     ntext += text[j];
  36.             }
  37.  
  38.             std::vector<std::string> permut2 = permutar2(ntext);
  39.             for(int j = 0; j < permut2.size(); ++j)
  40.                 permut[i+j] += permut2[j];
  41.         }
  42.     }
  43.     return permut;
  44. }
  45.  
  46. int main()
  47. {
  48.     std::string text = "abcd";
  49.     std::vector<std::string> permut = permutar2(text);
  50.  
  51.     for(int i = 0; i < permut.size(); ++i)
  52.         printf("%s\n", permut[i].c_str());
  53.  
  54.  
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement