第6講 数独を作ろう!
第2話 ラテン方陣解答例
解答例は、順列方陣その1です。
プログラムソースのメインは、次のようになっています。
Sub sakusei(g As Integer)
Dim i, j, k, l, hh, wa As Integer
j = g Mod n
i = Int(g / n)
For k = 1 To n * n
mah(i, j) = k
'Cells(i + 5, 1 + j) = mah(i, j)
hh = 0
If tyouhukuhantei(k - 1) = 1 Then GoTo owari
tyouhukuhantei(k - 1) = 1
hh = 1
If g + 1 < n * n Then
sakusei (g + 1)
Else
cn = cn + 1
hyouji
End If
owari:
If hh = 1 Then tyouhukuhantei(k - 1) = 0
Next
mah(i, j) = 0
End Sub
非常に簡単なプログラムですね。
では皆さん、次にラテン方陣の作成に挑戦しましょう。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 9 | 7 |
3 | 4 | 1 | 2 | 7 | 8 | 9 | 5 | 6 |
4 | 3 | 2 | 1 | 8 | 9 | 6 | 7 | 5 |
5 | 6 | 7 | 8 | 9 | 1 | 2 | 3 | 4 |
6 | 5 | 8 | 9 | 3 | 7 | 4 | 1 | 2 |
9 | 8 | 5 | 7 | 2 | 4 | 1 | 6 | 3 |
7 | 9 | 6 | 5 | 1 | 2 | 3 | 4 | 8 |
8 | 7 | 9 | 6 | 4 | 3 | 5 | 2 | 1 |
ラテン方陣とは上の方陣のようにどの列(縦)にも、
どの行(横)にも同じ数字が並ばず、
1から9までの数字が1つずつ入っている方陣を言います。
さらに、対角線の条件を加えたラテン方陣を
私は、魔方陣の特殊種と名付けています。
1 | 4 | 7 | 2 | 6 | 5 | 3 |
3 | 2 | 1 | 5 | 4 | 7 | 6 |
6 | 5 | 3 | 7 | 2 | 1 | 4 |
7 | 6 | 5 | 4 | 3 | 2 | 1 |
4 | 7 | 6 | 1 | 5 | 3 | 2 |
2 | 1 | 4 | 3 | 7 | 6 | 5 |
5 | 3 | 2 | 6 | 1 | 4 | 7 |
これに順列法を組み合わせた特殊種法×順列法は
信じられない速度(1秒で何百という単位)で魔方陣を作成します。
特殊種法と順列法の組み合わせによる魔方陣の作成も講義予定の1つです。
さて、皆さんラテン方陣を作成しましょう。
これを作るには、1から9までの数字をそれぞれ9個ずつ用意して、
どの列にもどの行にも同じ数字が並ばないようにします。
第1話へ 第3話へ
VB入門講義応用編トップへ
VB入門講義トップへ