第4講 残確定法によるさらなる高速化
第6話 プログラム解説その3

いよいよ最後
If n > 3 And g > 2 * n And i >= 1 And j = n - 1 Then
  wa = 0
  For k = 0 To n - 2
    wa = wa + mah(i, k)
  Next
  hhh = 0
  sa = Int(n * (n * n + 1) / 2) - wa
  If sa < 1 Or sa > n * n Then GoTo owari1
  If tyouhukuhantei(sa - 1) = 1 Then GoTo owari1
  mah(i, j) = sa
  tyouhukuhantei(sa - 1) = 1
  hhh = 1
  sakusei (g + 1)
  GoTo owari1
End If
If n > 3 And g > 2 * n And i = n - 1 And j >= 1 Then
  wa = 0
  For k = 0 To n - 2
    wa = wa + mah(k, j)
  Next
  hhh = 0
  sa = Int(n * (n * n + 1) / 2) - wa
  If sa < 1 Or sa > n * n Then GoTo owari1
  If tyouhukuhantei(sa - 1) = 1 Then GoTo owari1
  mah(i, j) = sa
  tyouhukuhantei(sa - 1) = 1
  hhh = 1
  If g + 1 < n * n Then
    sakusei (g + 1)
  Else
    cn = cn + 1
    hyouji
  End If
  GoTo owari1
End If

を説明します。今日もn = 5を例にとって説明しましょう。
n > 3 And g > 2 * n And i >= 1 And j = n - 1

 0  1  2  3  4
 1 15 24 23  2
21  7 10  8  ・
16  ・ 13  ・  ・
 5 20  ・ 19  ・
22  ・  ・  ・ 25
 0  1  2  3  4
 1 15 24 23  2
21  7 18  8 11
16 14 13 10  ・
 5 20  ・ 19  ・
22  ・  ・  ・ 25
 0  1  2  3  4
 1 15 24 23  2
21  7 18  8 11
16 14 13 12 10
 5 20  3 19  ・
22  ・  ・  ・ 25

ピンクの場所を表しています。
後は、今までと同じなので説明は不用でしょう。

第4講第5話へ
 第5講第1話へ


VB入門講義応用編トップへ

VB入門講義トップへ