Dim Shared As Ubyte grilla() Dim Shared As Integer ancho, alto, longitud Dim Shared As Integer cnt Dim Shared As Integer sgte(3) Dim Shared As Integer direcc(3, 1) => {{0, -1}, {-1, 0}, {0, 1}, {1, 0}} Sub Camino(y As Integer, x As Integer) If y = 0 Or y = alto Or x = 0 Or x = ancho Then cnt += 2 Return End If Dim As Integer t = y * (ancho + 1) + x grilla(t) += 1 grilla(longitud - t) += 1 For i As Integer = 0 To 3 If grilla(t + sgte(i)) = 0 Then Camino(y + direcc(i, 0), x + direcc(i, 1)) Next grilla(t) -= 1 grilla(longitud - t) -= 1 End Sub Function Solve(hh As Integer, ww As Integer, recur As Boolean) As Integer alto = hh ancho = ww If (alto And 1) <> 0 Then Swap alto, ancho Select Case True Case (alto And 1) = 1 Return 0 Case ancho = 1 Return 1 Case ancho = 2 Return alto Case alto = 2 Return ancho End Select Dim As Integer cy = alto \ 2 Dim As Integer cx = ancho \ 2 Redim grilla((alto + 1) * (ancho + 1)) longitud = (alto + 1) * (ancho + 1) - 1 sgte(0) = -1 sgte(1) = -ancho - 1 sgte(2) = 1 sgte(3) = ancho + 1 If recur Then cnt = 0 For x As Integer = cx + 1 To ancho - 1 Dim As Integer t = cy * (ancho + 1) + x grilla(t) = 1 grilla(longitud - t) = 1 Camino(cy - 1, x) Next cnt += 1 If alto = ancho Then cnt *= 2 Elseif (ancho And 1) = 0 And recur Then Solve(ancho, alto, 0) End If Return cnt End Function Dim As Integer y, x For y = 1 To 10 For x = 1 To y If (x And 1) = 0 Or (y And 1) = 0 Then Print Using "& x &: &"; y; x; Solve(y, x, True) End If Next Next Sleep