Enumérer les arrangements possibles d'un tableau

Contenu du snippet

''' <summary>Représente la méthode qui est appelé lorsqu'une permutation est trouvée</summary>
''' <typeparam name="T">Type des éléments</typeparam>
''' <param name="values">Tableau contenant les éléments</param>
Public Delegate Sub PermutationHappenHandler(Of T)(ByVal values() As T)

''' <summary>Énumère les arrangements possibles d’un tableau</summary>
''' <typeparam name="T">Type des éléments</typeparam>
''' <param name="values">Tableau contenant les éléments</param>
''' <param name="permutationHappen">Délégué appelé à chaque permutation trouvé</param>
Public Sub Permutation(Of T)(ByVal values() As T, ByVal permutationHappen As PermutationHappenHandler(Of T))
  If values Is Nothing Then Throw New ArgumentNullException("values")
  PermutationRec(Of T)(values, 0, values.GetUpperBound(0), permutationHappen)
End Sub

''' <summary>Énumère les arrangements possibles d’un tableau</summary>
''' <typeparam name="T">Type des éléments</typeparam>
''' <param name="values">Tableau contenant les éléments</param>
''' <param name="start">Index de l'élément de départ</param>
''' <param name="permutationHappen">Délégué appelé à chaque permutation trouvé</param>
Public Sub Permutation(Of T)(ByVal values() As T, ByVal start As Integer, ByVal permutationHappen As PermutationHappenHandler(Of T))
  If values Is Nothing Then Throw New ArgumentNullException("values")
  If start < values.GetLowerBound(0) OrElse start > values.GetUpperBound(0) Then Throw New ArgumentOutOfRangeException("start")
  PermutationRec(Of T)(values, start, values.GetUpperBound(0), permutationHappen)
End Sub

''' <summary>Énumère les arrangements possibles d’un tableau</summary>
''' <typeparam name="T">Type des éléments</typeparam>
''' <param name="values">Tableau contenant les éléments</param>
''' <param name="start">Index de l'élément de départ</param>
''' <param name="length">Nombre d'éléments à prendre en compte</param>
''' <param name="permutationHappen">Délégué appelé à chaque permutation trouvé</param>
Public Sub Permutation(Of T)(ByVal values() As T, ByVal start As Integer, ByVal length As Integer, ByVal permutationHappen As PermutationHappenHandler(Of T))
  If values Is Nothing Then Throw New ArgumentNullException("values")
  If start < values.GetLowerBound(0) OrElse start > values.GetUpperBound(0) Then Throw New ArgumentOutOfRangeException("start")
  If length < 1 OrElse length > values.Length - start Then Throw New ArgumentOutOfRangeException("length")
  PermutationRec(Of T)(values, start, start + length - 1, permutationHappen)
End Sub

Private Sub PermutationRec(Of T)(ByVal values() As T, ByVal startpos As Integer, ByVal endpos As Integer, ByVal permutationHappen As PermutationHappenHandler(Of T))
  Dim tmp As T
  If (permutationHappen IsNot Nothing) Then permutationHappen(values)
  For i As Integer = startpos To endpos
    For j As Integer = i + 1 To endpos
      tmp = values(i)
      values(i) = values(j)
      values(j) = tmp
      PermutationRec(values, i + 1, endpos, permutationHappen)
      values(j) = values(i)
      values(i) = tmp
  Next j, i
End Sub


Compatibilité : VB 2005, VB 2008

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.