第4講 残確定法によるさらなる高速化
第2話 プログラム変更(追加)部分


If g = n - 1 Then
  wa = 0
  For k = 0 To n - 2
    wa = wa + mah(k, 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 g = 2 * n - 1 And n Mod 2 = 0 Then
  wa = 0
  For k = 0 To n - 2
    wa = wa + mah(k, n - 1 - 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 g = 2 * n - 2 And n Mod 2 = 1 Then
  wa = 0
  For k = 0 To n - 2
    wa = wa + mah(k, n - 1 - 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 i = 0 And j = n - 2 Then
  wa = 0
  For k = 0 To n - 3
    wa = wa + mah(i, k)
  Next
  wa = wa + mah(i, n - 1)
  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 i = n - 2 And j = 0 Then
  wa = 0
  For k = 0 To n - 3
    wa = wa + mah(k, j)
  Next
  wa = wa + mah(n - 1, j)
  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 >= 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
kk = (n + 1) * i
For k = 1 To n * n
  ・
  ・
  ・
Next

owari1:
If hhh = 1 Then tyouhukuhantei(sa - 1) = 0


第4講第1話へ
 第4講第3話へ


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

VB入門講義トップへ