パズル万華鏡

面白いパズルの紹介と解説をします。

順列生成(交換法)問題(2)の考察1

 順列生成(交換法)問題(2)の考察1を示します。

問題(2)の考察1
f:id:isemba:20200223192620p:plain
>|Basic|
' << CH201.bas >>
' 問題(2)の考察1に基づく順列生成プログラム。
' Tiny Basic
'
Public A(9) ' 順列を保存する配列。
Public N ' 要素数
Public COUNT ' 生成された順列の個数。
'
Do
' Nの読み込み。
Read N
If (N <= 0) Or (N > 9) Then Exit Do
Data 1, 2, 3, 4, 0
'
' 初期設定。
COUNT=0

' 順列生成。
Call Perm(0)
'
' 結果の表示。
Print Using"N=## COUNT=######";N;COUNT
Loop
End
'
' 順列を生成する再帰手続き。
' Kは木の深さを表す。
Sub Perm(K)
' 生成された順列の表示。
If( K = N ) Then
COUNT=COUNT+1
Print Using"###: ";COUNT;
For I=1 To N: Print Using"##";A(I);: Next I
Print
Exit Sub
End If
'
' 深さKのK+1個の子節点を生成する。
For I=K+1 To 1 Step -1
' K+1番目の要素K+1をI番目と交換。
A(K+1)=A(I): A(I)=K+1
' 深さK+1の子節点を作成する。
Call Perm(K+1)
' 状態を戻す。
A(I)=A(K+1)
Next I
End Sub
|