第9講 プロシージャの再帰的使用
第7話 4次順列をプロシージャの再帰的使用を使わずにfor文で実現する
4次順列生成プログラム
Module Module1
Sub Main() '私は社長だ。
f (4)
End Sub
Sub f(n As Integer)
Dim i, j, k, l, m, h, hh, hhh, x(24), cn As Integer '将来5次魔方陣まで生成できるように!
cn = 0
For i = 0 To n - 1
x(0) = i + 1
For j = 0 To n - 1
h = 1
If j + 1 = x(0) Then h = 0
If h = 1 Then
x(1) = j + 1
For k = 0 To n - 1
hh = 1
For l = 0 To n - 3
If x(l) = k + 1 Then
hh = 0
Exit For
End If
Next
If hh = 1 Then x(2) = k + 1
If hh = 1 Then
For l = 0 To n - 1
hhh = 1
For m = 0 To n - 2
If x(m) = l + 1 Then
hhh = 0
Exit For
End If
Next
If hhh = 1 Then x(3) = l + 1
If hhh = 1 Then
cn += 1
For m = 0 To n - 1
Console.Write("{0:d} ", x(m))
Next
Console.WriteLine()
End If
Next
End If
Next
End If
Next
Next
Console.WriteLine("生成された{0:d}次順列は{1:d}個です。", n, cn)
End Sub
End Module
実行画面
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
生成された4次順列は24個です。
いよいよ普遍版n次順列生成ソフトの開発をはじめたいと思いますが、
初心者どころか中級者にさえ難しい課題ですから、
ヒントを次話で説明します。