se podra hacer si quiero partir desde una soluicion propuesta inicial? es decir en el arbol no partir del punto 0 sino que en el nivel 4 y de ahi ramificar las posibles iteraciones
en la linea if( (reinas[i]==reinas[k]) or (abs(k-i) == abs(reinas[k]-reinas[i]))){ no es necesario abs(k-i) dado que k>i bastaria con k-i igual puedes poner el apuntador como variable global y te ahorrarías el envió en cada llamado a la función solo digo :)
Hay algo que no logro entender, agradecería mucho que alguien me lo aclare. Si k=n entraría en el if de la función para imprimir el arreglo que refleja una solución, lo que no me explico es, por que se sigue ejecutando la función si no hay un bucle que la haga repetirse, como lo es para el caso del "else" que si tiene un bucle "for" que hace que se busque continuamente hasta que k sea igual a n
Hola, gracias por el video, vengo de un curso de c++ donde se vio el tema y al no entenderlo busque aqui en youtube y tu video me hizo comprenderlo mucho mejor, pero tengo una duda, en que parte del codigo o en que momento se realiza el backtracking? es decir, en que parte del codigo se regresa a una columna anterior al no poder colocar una reina?
Se regresa cuando la función recursiva llega al caso base. Recuerda que una función recursiva siempre tiene un caso base y un caso que la hace entrar en recursividad. En el momento en que la función llega a un caso base significa que ya no es posible seguir buscando por ese camino y pasará a regresar hacia arriba en el árbol de búsqueda, descartando de esta forma movimientos que ya había tomado y regresando a una posición anterior. Si se descartan varias posiciones en algún momento se descartara todas las posiciones de una columna haciendo que regreses a la columna anterior. Espero haber respondido tu pregunta. Si no es así puedes volver a replantearme la pregunta para volver a responderte mejor😁👽💻😁
@@courezprogramacion8023 Me sigue costando un poco la verdad jaja, se me complica la recursividad, voy a tratar de escribir un ejemplo para dar a entender mas mi duda: Suponiendo que en la primer llamada se coloca la reina[0], se coloca sin problemas en la primer fila ya que todo el tablero está solo, como la funcion comprobar regresa true al colocar la reina[0], se manda a llamar recursivamente a Nreinas, pero ahora con reinas[1], ahora, suponiendo (se que no pasaría esto en la segunda reina porque hay muchas posiciones libres) que la reina[1] no se pudo colocar en ninguna fila, al no llamar recursirvamente de nuevo a Nreinas por regresar falso en comprobar en sus N filas, se acaba la ejecucion recursiva de reinas[1] que llamó reinas[0], ahora que es lo que ocurre despues que hace que reinas[0] busque otra fila y vuelva a intentar llenar reinas[1]? Si vi los videos anteriores pero la verdad sigue confundiendome o mi logica no logra entender que es lo que pasa exactamente
@@richardmartinez2524 No me llego el archivo. Pero seria buenisimo si pudieras compartir el link del documento aca de forma publica, como comentario para que todos podamos verlo :)
Jajaja. Esque este problema está relacionado con el problema ¿P=NP?. El cual es un problema que aún no ha sido resuelto hasta ahora. Puedes buscar más información al respecto en internet, es un tema bastante interesante :)
Amigo,sin duda genial, haces videos de excelente calidad y organizacion, te ganaste una humilde suscripcion y like, sigue asi
Muchas gracias por la buenas vibras 😁👽💻
se podra hacer si quiero partir desde una soluicion propuesta inicial? es decir en el arbol no partir del punto 0 sino que en el nivel 4 y de ahi ramificar las posibles iteraciones
Te entiendo más a ti que a mi profe jaja, excelente vídeo!!
en la linea
if( (reinas[i]==reinas[k]) or (abs(k-i) == abs(reinas[k]-reinas[i]))){
no es necesario abs(k-i) dado que k>i bastaria con k-i
igual puedes poner el apuntador como variable global y te ahorrarías el envió en cada llamado a la función
solo digo :)
Explicas muy bien, sos grande
Hola! Se puede hacer lo mismo con el método: de Ramificación y poda?
Excelente amigo!!!!
Excelente, buen video 👍
Hay algo que no logro entender, agradecería mucho que alguien me lo aclare.
Si k=n entraría en el if de la función para imprimir el arreglo que refleja una solución, lo que no me explico es, por que se sigue ejecutando la función si no hay un bucle que la haga repetirse, como lo es para el caso del "else" que si tiene un bucle "for" que hace que se busque continuamente hasta que k sea igual a n
Hola, gracias por el video, vengo de un curso de c++ donde se vio el tema y al no entenderlo busque aqui en youtube y tu video me hizo comprenderlo mucho mejor, pero tengo una duda, en que parte del codigo o en que momento se realiza el backtracking? es decir, en que parte del codigo se regresa a una columna anterior al no poder colocar una reina?
Se regresa cuando la función recursiva llega al caso base. Recuerda que una función recursiva siempre tiene un caso base y un caso que la hace entrar en recursividad. En el momento en que la función llega a un caso base significa que ya no es posible seguir buscando por ese camino y pasará a regresar hacia arriba en el árbol de búsqueda, descartando de esta forma movimientos que ya había tomado y regresando a una posición anterior. Si se descartan varias posiciones en algún momento se descartara todas las posiciones de una columna haciendo que regreses a la columna anterior. Espero haber respondido tu pregunta. Si no es así puedes volver a replantearme la pregunta para volver a responderte mejor😁👽💻😁
@@courezprogramacion8023 Me sigue costando un poco la verdad jaja, se me complica la recursividad, voy a tratar de escribir un ejemplo para dar a entender mas mi duda:
Suponiendo que en la primer llamada se coloca la reina[0], se coloca sin problemas en la primer fila ya que todo el tablero está solo, como la funcion comprobar regresa true al colocar la reina[0], se manda a llamar recursivamente a Nreinas, pero ahora con reinas[1], ahora, suponiendo (se que no pasaría esto en la segunda reina porque hay muchas posiciones libres) que la reina[1] no se pudo colocar en ninguna fila, al no llamar recursirvamente de nuevo a Nreinas por regresar falso en comprobar en sus N filas, se acaba la ejecucion recursiva de reinas[1] que llamó reinas[0], ahora que es lo que ocurre despues que hace que reinas[0] busque otra fila y vuelva a intentar llenar reinas[1]?
Si vi los videos anteriores pero la verdad sigue confundiendome o mi logica no logra entender que es lo que pasa exactamente
Se puede en netbeans
Tienes buen contenido, nuevo sub
Excelente video. Tengo una solución al problema de las mil reinas pero en Excel.
Es un placer ayudar. Puedes compartirnos el excel mediante drive😁
@@courezprogramacion8023 Recibió el archivo?
@@richardmartinez2524 No me llego el archivo. Pero seria buenisimo si pudieras compartir el link del documento aca de forma publica, como comentario para que todos podamos verlo :)
En python bro, gracias
Me sumo a esa.
Ya la hice en Python por si lo quieren
@@oscarroberto9137 Qué bueno, si quieres, podrías compartirlo en Google Drive para todos los que estén interesados.
¿Por que trato de correr el programa con este código y me marca error en el valor absoluto?
me debes una compuadora
programalo en tcl con gui. y seguro necesitaras menos lineas que con python.
Pensaba que el truco era si n era 0, 1 o 2 el algoritmo no funcionaba xD
Jajaja. Esque este problema está relacionado con el problema ¿P=NP?. El cual es un problema que aún no ha sido resuelto hasta ahora. Puedes buscar más información al respecto en internet, es un tema bastante interesante :)
Ok gracias por la info
ANEXO : 100 PROBLEMAS RESUELTOS DE 12 REINAS
ESTA EN COORDENADAS CARTESIANAS
EL PRIMER VALOR ES EL NUMERAL VA DE 1 A CIEN
EL SEGUNDO ES EL CODIGO DE LOS 14200 RESULTADOS
EL RESTO : EL PAR (X,Y)
X=1, Y=7
X=2, Y=2
X=3, Y=6
X=4,Y=8
X=5, Y=12
X=6, Y=1
X=7, Y=4
X=8, Y=10
X=9, Y=5
X=10, Y=11
X=11, Y=9
X=12, Y=3
Y ASI SUCESIVAMENTE LOS CIEN CASOS DE 12 POR 12
1 142 7 2 6 8 12 1 4 10 5 11 9 3
2 284 7 3 1 9 5 10 2 11 8 12 4 6
3 426 7 3 11 6 8 1 4 12 9 2 5 10
4 568 7 4 6 12 10 5 11 9 1 3 8 2
5 710 7 4 12 3 8 11 2 6 1 10 5 9
6 852 7 5 8 11 1 3 9 12 4 2 10 6
7 994 7 9 2 5 10 1 11 6 3 12 8 4
8 1136 7 9 12 6 2 10 5 1 4 11 3 8
9 1278 7 10 6 3 1 4 11 8 2 5 12 9
10 1420 7 11 3 12 4 8 5 2 10 1 6 9
11 1562 7 12 3 8 2 11 6 1 10 5 9 4
12 1704 5 1 9 4 10 8 2 11 7 3 12 6
13 1846 5 2 9 7 12 1 8 6 11 3 10 4
14 1988 5 3 9 11 8 1 12 6 2 10 7 4
15 2130 5 7 9 1 12 4 8 3 11 6 10 2
16 2272 5 7 12 6 11 1 10 4 2 8 3 9
17 2414 5 8 6 12 2 11 7 10 4 9 1 3
18 2556 5 9 1 6 11 3 8 4 12 10 2 7
19 2698 5 9 6 10 3 1 12 2 8 11 7 4
20 2840 5 10 2 9 11 4 8 1 12 7 3 6
21 2982 5 10 8 11 2 7 3 1 9 12 6 4
22 3124 5 11 9 6 3 1 10 7 2 4 12 8
23 3266 5 12 10 7 2 4 1 8 11 9 6 3
24 3408 8 1 12 7 11 2 5 9 4 10 3 6
25 3550 8 3 1 10 7 5 12 2 4 6 11 9
26 3692 8 3 11 2 10 6 1 12 4 9 7 5
27 3834 8 4 7 1 11 2 6 9 12 5 3 10
28 3976 8 4 12 1 11 7 10 3 5 2 9 6
29 4118 8 5 3 12 9 2 6 10 1 11 4 7
30 4260 8 6 1 3 11 9 4 2 5 10 12 7
31 4402 8 6 4 10 1 5 9 2 12 7 11 3
32 4544 8 10 3 7 11 1 6 2 5 12 4 9
33 4686 8 11 4 1 9 5 12 10 7 2 6 3
34 4828 8 12 4 6 11 2 10 5 3 1 9 7
35 4970 4 2 9 5 10 8 1 12 7 3 6 11
36 5112 4 6 9 12 5 11 2 7 10 8 3 1
37 5254 4 7 5 10 12 1 6 2 9 11 8 3
38 5396 4 7 12 2 9 6 3 10 8 11 5 1
39 5538 4 8 10 5 3 1 9 12 6 2 7 11
40 5680 4 9 3 8 11 1 6 2 5 7 12 10
41 5822 4 9 12 3 7 2 11 6 1 10 8 5
42 5964 4 10 8 3 5 7 11 1 6 12 9 2
43 6106 4 11 8 3 7 12 2 6 1 10 5 9
44 6248 4 12 9 11 3 1 6 10 2 7 5 8
45 6390 9 2 4 10 7 11 6 1 12 8 5 3
46 6532 9 3 5 2 10 12 7 1 4 6 8 11
47 6674 9 3 12 7 11 2 5 1 4 10 8 6
48 6816 9 4 8 5 12 10 1 11 6 3 7 2
49 6958 9 5 2 10 7 3 8 12 4 1 11 6
50 7100 9 5 12 10 3 7 4 1 8 2 11 6
51 7242 9 6 4 7 10 12 2 8 5 3 1 11
52 7384 9 7 3 8 12 2 4 6 11 5 10 1
53 7526 9 11 2 8 12 3 1 6 10 5 7 4
54 7668 3 5 7 9 4 12 1 6 10 2 11 8
55 7810 3 6 4 9 5 12 10 1 7 2 8 11
56 7952 3 6 12 9 2 5 10 4 1 8 11 7
57 8094 3 7 12 10 2 4 6 11 9 1 5 8
58 8236 3 8 11 1 6 10 12 7 4 2 9 5
59 8378 3 9 6 12 5 11 1 7 4 2 8 10
60 8520 3 10 7 1 4 9 12 8 5 11 2 6
61 8662 3 11 7 1 6 12 2 8 5 9 4 10
62 8804 10 1 5 2 8 12 3 9 6 4 11 7
63 8946 10 2 9 3 12 7 1 6 11 5 8 4
64 9088 10 3 9 2 4 1 7 11 6 12 5 8
65 9230 10 4 9 5 3 11 7 2 12 6 8 1
66 9372 10 5 3 11 4 12 9 6 1 7 2 8
67 9514 10 6 2 11 8 3 7 4 1 12 9 5
68 9656 10 7 2 11 3 12 9 5 1 4 6 8
69 9798 10 8 2 5 12 1 7 11 3 6 4 9
70 9940 10 12 5 8 1 3 6 2 9 11 4 7
71 10082 2 5 9 12 10 8 3 1 4 7 11 6
72 10224 2 7 1 6 12 9 11 3 5 10 8 4
73 10366 2 8 1 7 12 10 6 4 11 5 3 9
74 10508 2 9 6 8 3 1 12 10 5 7 11 4
75 10650 2 10 8 6 1 3 11 7 12 4 9 5
76 10792 11 1 8 5 12 2 7 10 6 3 9 4
77 10934 11 3 10 2 4 9 7 12 1 6 8 5
78 11076 11 5 3 9 4 10 1 6 2 7 12 8
79 11218 11 6 4 2 12 9 7 10 1 3 5 8
80 11360 11 7 5 2 8 12 3 9 6 1 10 4
81 11502 11 9 4 1 5 8 2 12 7 3 10 6
82 11644 1 5 8 11 9 3 6 2 10 12 7 4
83 11786 1 7 5 12 9 4 10 3 6 11 2 8
84 11928 1 9 6 8 2 12 3 7 4 11 5 10
85 12070 12 1 7 4 10 8 2 11 3 6 9 5
86 12212 12 4 9 3 5 2 10 1 7 11 8 6
87 12354 12 6 9 7 2 8 3 1 10 5 11 4
88 12496 12 8 11 5 3 1 9 4 2 7 10 6
89 12638 6 1 10 5 9 12 3 8 11 2 4 7
90 12780 6 2 10 1 9 4 8 11 3 12 7 5
91 12922 6 3 7 10 12 9 2 4 11 8 5 1
92 13064 6 4 1 7 9 12 3 8 10 5 2 11
93 13206 6 4 11 8 3 12 2 7 1 10 5 9
94 13348 6 8 5 2 12 9 4 1 3 10 7 11
95 13490 6 9 1 10 5 2 11 7 3 12 8 4
96 13632 6 9 5 12 8 4 11 1 3 7 10 2
97 13774 6 10 2 7 5 12 9 1 4 11 3 8
98 13916 6 10 12 4 1 8 11 3 7 9 2 5
99 14058 6 11 7 5 1 9 4 8 3 12 10 2
100 14200 6 12 10 8 5 3 1 7 2 11 9 4