UNICYCLE 
 Permutations with a Single Cycle
    
    
    
      UNICYCLE
      is a FORTRAN90 library which
      carries out some operations on permutations with a single cycle.
    
    
      A permutation with a single cycle is a permutation P of N objects
      with the property that, for every object, it takes exactly N applications
      of P to restore an object to its original value.
    
    
      Another way to think of this is that a permutation with a single cycle
      can be symbolized by a bracelet with N beads; the action of the permutation
      is to rotate the bracelet one position.
    
    
      A permutation with a single cycle can be written in "sequence" form.
      Assuming the objects are labeled 1 through N, we start with 1, followed
      by P(1), followed by P(P(1)), and so on.  Thus, the sequence (1,4,2,5,3)
      indicates the permutation which maps 1->4, 2->5, 3->1, 4->2, and 5->3.
    
    
      A permutation with a single cycle is sometimes called a "cyclic permutation",
      but this term is also used with other meanings.  Hence, we will affectionately
      call these objects "unicycles".
    
    
      Licensing:
    
    
      The computer code and data files described and made available on this
      web page are distributed under
      the GNU LGPL license.
    
    
      Languages:
    
    
      UNICYCLE is available in
      a C version and
      a C++ version and
      a FORTRAN90 version and
      a MATLAB version and
      a Python version.
    
    
      Related Data and Programs:
    
    
      
      COMBO,
      a FORTRAN90 library which
      includes many combinatorial routines.
    
    
      
      SELECT,
      a FORTRAN90 library which
      generates various combinatorial objects.
    
    
      
      SUBSET,
      a FORTRAN90 library which
      generates, ranks and unranks various combinatorial objects.
    
    
      Source Code:
    
    
      
    
    
      Examples and Tests:
    
    
      
    
    
      List of Routines:
    
    
      
        - 
          I4_FACTORIAL computes the factorial of N.
        
- 
          I4_MODP returns the nonnegative remainder of I4 division.
        
- 
          I4_UNIFORM returns a scaled pseudorandom I4.
        
- 
          I4_WRAP forces an I4 to lie between given limits by wrapping.
        
- 
          I4VEC_INDICATOR sets an I4VEC to the indicator vector.
        
- 
          I4VEC_REVERSE reverses the elements of an I4VEC.
        
- 
          PERM_CHECK checks a representation of a permutation.
        
- 
          PERM_ENUM enumerates the permutations on N digits.
        
- 
          PERM_INVERSE computes the inverse of a permutation.
        
- 
          PERM_IS_UNICYCLE is TRUE if a permutation is a unicycle.
        
- 
          PERM_LEX_NEXT computes the lexicographic permutation successor.
        
- 
          PERM_LEX_RANK computes the lexicographic rank of a permutation.
        
- 
          PERM_LEX_UNRANK computes the permutation of given lexicographic rank.
        
- 
          PERM_PRINT prints a permutation.
        
- 
          PERM_RANDOM selects a random permutation of N objects.
        
- 
          TIMESTAMP prints the current YMDHMS date as a time stamp.
        
- 
          UNICYCLE_CHECK checks that a vector represents a unicycle.
        
- 
          UNICYCLE_ENUM enumerates the unicycles.
        
- 
          UNICYCLE_INDEX returns the index form of a unicycle.
        
- 
          UNICYCLE_INDEX_PRINT prints a unicycle given in index form.
        
- 
          UNICYCLE_INDEX_TO_SEQUENCE converts a unicycle from index o sequence form.
        
- 
          UNICYCLE_INVERSE returns the inverse of a unicycle.
        
- 
          UNICYCLE_NEXT generates unicycles in lexical order, one at a time.
        
- 
          UNICYCLE_PRINT prints a unicycle given in sequence form.
        
- 
          UNICYCLE_RANDOM selects a random unicycle of N objects.
        
- 
          UNICYCLE_RANK computes the rank of a unicycle.
        
- 
          UNICYCLE_UNRANK "unranks" a unicycle.
        
      You can go up one level to 
      the FORTRAN90 source codes.
    
    
    
      Last revised on 14 June 2012.