Je cherche un algorithme, qui donne toute les combinaisons possibles avec (n) éléments, avec répétitions des caractères. L'algorithme doit trier les doubles évidement.


J'ai adapté cet algorithme en VB Express 2010, cela fonctionne, mais il n'y a pas la répétition des caractères

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
Dim tablo_origine() As String
Dim tablo_test() As Boolean
Dim tablo_resultat() As String
 
//////////////////////////////////////////////////////////////////////////////////////////////
 
Private Sub Button1_Click
 
Dim i As Integer
Dim nElements As Integer
 
'dimensionnement du tableau d'origine et remplissage
ReDim tablo_origine(2)
 
 
'Alimente les éléments du tableau
tablo_origine(0) = "a"
tablo_origine(1) = "b"
tablo_origine(2) = "c"
 
nElements = UBound(tablo_origine)
 
ReDim tablo_test(nElements)
ReDim tablo_resultat(0)
'lancement de la procédure récursive
test(0)
End Sub
 
//////////////////////////////////////////////////////////////////////////////////////////////////////
 
Sub test(ByVal n As Integer)
 
Dim i As Integer, i1 As Integer
Dim s As String
 
 
For i = 0 To UBound(tablo_origine)
'si valeur non sélectionnée
If tablo_test(i) = False Then
tablo_resultat(n) = tablo_origine(i)
'si on a parcourru tout le tableau d'origine
If n = UBound(tablo_origine) Then
'on construit la chaine d'affichage
s = ""
For i1 = 0 To n
s = s & tablo_resultat(i1)
 
Next
 
 
'remplissage ListBox
ListBox1.Items.Add(s)
 
 
 
'sinon, on relance la procédure récursive
Else
'on coche la valeur déjà choisie
tablo_test(i) = True
'on prépare le tableau résultat
ReDim Preserve tablo_resultat(n + 1)
'on relance la procédure
test(UBound(tablo_resultat))
'on rétablit le tableau résultat d'avant
ReDim Preserve tablo_resultat(n)
'on décoche la valeur déjà choisie
tablo_test(i) = False
End If
End If
Next
 
End Sub
 
/////////////////////////////////////////////////////////////////////////

Ce qui donne comme résultat: abc, acb, bac, bca, cab, cba.

Alors que je voudrais aussi, aab, aac, bba ,bbc, cca, ccb.

Merci