第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