12 de septiembre de 2006

Permutaciones

Código de VFP para permutar una cadena. Por ejemplo, hay 6 permutaciones de "ABC": ABC, ACB, BAC, BCA, CAB y CBS. Y hay N! permutaciones de una cadena de longitud N.

Artículo en inglés en el Blog de Calvin Hsia.

-- Permutations --
http://blogs.msdn.com/calvin_hsia/archive/2005/01/18/355405.aspx

Ejemplo:
nn=0
permute("abcd",0)
 
PROCEDURE permute(cstr,nLev)
      LOCAL nTrylen,i
      nTrylen= LEN(cstr)-nLev
      IF nTryLen = 0
            nn=nn+1
            ?nn,cstr
      ELSE
            FOR i = 1 to nTrylen
                  IF i>1      && swap nlev+1 and nlev+i chars
                        cstr= LEFT(cstr,nlev) + SUBSTR(cstr,nLev+i,1) +;
                              SUBSTR(cstr,nLev+2, i-2)+SUBSTR(cstr,nlev+1,1)+SUBSTR(cstr,nLev+i+1)
                  ENDIF
                  permute(cstr,nlev+1)
            ENDFOR
      ENDIF
RETURN

No hay comentarios. :

Publicar un comentario