文字を並び替えるには?


困男  2005-08-17 05:19:12  No: 124156

私がやりたいことは「あ、い、う」などの文字を
あいう  あうい  いあう  いうあ  うあい  ういあ

というようにすべてのパターンを洗い出したいのですが、アルゴリズムが
思い浮かびません。なにか良いサンプル、アルゴリズムがありましたら
よろしくお願いします。

開発環境  vb6 windwsXP SP2


ねろ  2005-08-18 01:54:09  No: 124157

実はこの手の順列の列挙型のアルゴリズムには、
再帰を使った有名なアルゴリズムがあります。
大概は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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加