-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbacktracking.rb
59 lines (55 loc) · 1.49 KB
/
backtracking.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
def imprimirSolucion(tablero)
tablero.each do |fila|
col = ""
fila.each do |columna|
col = col + "#{columna} "
end
puts col
end
end
def esValido(fila, columna, tablero)
if fila >= 0 and fila < tablero.length and columna >= 0 and columna < tablero.length and tablero[fila][columna] == -1
return true
end
return false
end
def backtracking(fila, columna, tablero, total_movidas, movimientos)
siguiente_fila = 0, siguiente_columna = 0
if total_movidas == movimientos.length*movimientos.length
return true
end
8.times do |k|
siguiente_fila = fila + movimientos[k][0];
siguiente_columna = columna + movimientos[k][1];
if esValido(siguiente_fila, siguiente_columna, tablero)
tablero[siguiente_fila][siguiente_columna] = total_movidas;
if backtracking(siguiente_fila, siguiente_columna, tablero, total_movidas+1, movimientos) == true
return true
else
tablero[siguiente_fila][siguiente_columna] = -1
end
end
end
return false
end
def resolverProblema(n)
tablero = []
movimientos = [[2,1],[1,2],[-1,2],[-2,1],[-2,-1],[-1,-2],[1,-2],[2,-1]]
n.times do
arreglo = []
n.times do
arreglo << -1
end
tablero << arreglo
end
tablero[0][0] = 0
if backtracking(0, 0, tablero, 1, movimientos) == false
puts "No existe Solución posible"
return false
else
puts "La matriz muestra por orden desde 0 hasta X los movimientos que debe hacer el Caballo para recorrer todos los espacios del tablero"
imprimirSolucion(tablero)
return true
end
end
resolverProblema(8)