私がやりたいことは「あ、い、う」などの文字を
あいう あうい いあう いうあ うあい ういあ
というようにすべてのパターンを洗い出したいのですが、アルゴリズムが
思い浮かびません。なにか良いサンプル、アルゴリズムがありましたら
よろしくお願いします。
開発環境 vb6 windwsXP SP2
実はこの手の順列の列挙型のアルゴリズムには、
再帰を使った有名なアルゴリズムがあります。
大概はCで書かれていますが、ザザットVBに
直して見ました。
フォームにSortedプロパティをONにしたListBox
とコマンドボタンを1つ置きます。
取りあえず文字数は5としてあります。
再帰を使っている関係上7文字位が限度かも知れません。
ListBoxには文字列の並べる順番が表示されます。
Splitで切り分けて、文字の番号順に並べます。
重複文字がある場合はどうしたら良いかわかりますよね。
Option Explicit
Const N = 5 '文字列の数
Dim p(N) As Integer
Private Sub Command1_Click()
Dim pos As Integer
For pos = 0 To N - 1
p(pos) = 0
Next
For pos = 0 To N - 1
ChangeC pos, 1
Next
End Sub
Public Sub AddList()
Dim i As Integer
Dim s As String
s = CStr(p(0))
For i = 1 To N - 1
s = s & "," & CStr(p(i))
Next
List1.AddItem s
End Sub
Private Sub ChangeC(ByVal pos As Integer, ByVal k As Integer)
Dim j As Integer
p(pos) = k
If N = k Then
AddList
Else
For j = 0 To N - 1
If p(j) = 0 Then
ChangeC j, k + 1
End If
Next
End If
p(pos) = 0
End Sub
ツイート | ![]() |