{"id":416,"date":"2026-03-08T18:25:34","date_gmt":"2026-03-08T18:25:34","guid":{"rendered":"https:\/\/hackcuba.net\/?p=416"},"modified":"2026-03-08T18:25:34","modified_gmt":"2026-03-08T18:25:34","slug":"el-problema-de-las-nueve-reinas-en-c","status":"publish","type":"post","link":"https:\/\/hackcuba.net\/?p=416","title":{"rendered":"El problema de las nueve reinas en C++"},"content":{"rendered":"\n<p>El <strong>problema de las nueve reinas<\/strong> consiste en colocar <strong>9 reinas en un tablero de ajedrez de 9\u00d79<\/strong> de manera que <strong>ninguna reina pueda atacar a otra<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>En ajedrez, una reina puede moverse:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>horizontalmente<\/li>\n\n\n\n<li>verticalmente<\/li>\n\n\n\n<li>diagonalmente<\/li>\n<\/ul>\n\n\n\n<p>Por lo tanto, dos reinas <strong>no pueden compartir<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la misma fila<\/li>\n\n\n\n<li>la misma columna<\/li>\n\n\n\n<li>la misma diagonal<\/li>\n<\/ul>\n\n\n\n<p>Este problema es un cl\u00e1sico ejemplo usado en inform\u00e1tica para ense\u00f1ar t\u00e9cnicas de b\u00fasqueda y algoritmos de <strong>Backtracking<\/strong>.<\/p>\n\n\n\n<p>El m\u00e9todo de backtracking prueba posiciones posibles y <strong>retrocede cuando encuentra un conflicto<\/strong>, explorando sistem\u00e1ticamente todas las soluciones.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Idea del algoritmo<\/h1>\n\n\n\n<p>Para resolver el problema se usa el siguiente enfoque:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Colocar una reina en la primera columna.<\/li>\n\n\n\n<li>Intentar colocar otra reina en la segunda columna.<\/li>\n\n\n\n<li>Verificar si la posici\u00f3n es segura.<\/li>\n\n\n\n<li>Si no lo es, probar otra fila.<\/li>\n\n\n\n<li>Si ninguna fila funciona, regresar a la columna anterior.<\/li>\n\n\n\n<li>Continuar hasta colocar las 9 reinas.<\/li>\n<\/ol>\n\n\n\n<p>Este proceso se repite hasta encontrar una soluci\u00f3n v\u00e1lida.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &lt;iostream&gt;\nusing namespace std;\n\n\/\/ N define el tama\u00f1o del tablero.\n\/\/ Como es el problema de las nueve reinas,\n\/\/ usamos un tablero de 9x9.\nconst int N = 9;\n\n\/\/ Esta matriz representa el tablero de ajedrez.\n\/\/ 0 = casilla vac\u00eda\n\/\/ 1 = hay una reina colocada\nint tablero&#x5B;N]&#x5B;N];\n\n\n\/\/ ------------------------------------------------------------\n\/\/ Funci\u00f3n: esSeguro\n\/\/ Verifica si es posible colocar una reina en la posici\u00f3n\n\/\/ (fila, col) sin que sea atacada por otra reina.\n\/\/ ------------------------------------------------------------\nbool esSeguro(int fila, int col)\n{\n    int i, j;\n\n    \/\/ Revisar si existe una reina en la misma fila\n    \/\/ hacia la izquierda (columnas anteriores).\n    \/\/ No revisamos hacia la derecha porque a\u00fan\n    \/\/ no hemos colocado reinas all\u00ed.\n    for(i = 0; i &lt; col; i++)\n        if(tablero&#x5B;fila]&#x5B;i])\n            return false;\n\n    \/\/ Revisar diagonal superior izquierda.\n    \/\/ Si encontramos una reina, la posici\u00f3n no es v\u00e1lida.\n    for(i = fila, j = col; i &gt;= 0 &amp;&amp; j &gt;= 0; i--, j--)\n        if(tablero&#x5B;i]&#x5B;j])\n            return false;\n\n    \/\/ Revisar diagonal inferior izquierda.\n    for(i = fila, j = col; i &lt; N &amp;&amp; j &gt;= 0; i++, j--)\n        if(tablero&#x5B;i]&#x5B;j])\n            return false;\n\n    \/\/ Si no hay conflictos, la posici\u00f3n es segura.\n    return true;\n}\n\n\n\/\/ ------------------------------------------------------------\n\/\/ Funci\u00f3n: resolverReinas\n\/\/ Implementa el algoritmo de backtracking.\n\/\/ Intenta colocar una reina en cada columna.\n\/\/ Si una posici\u00f3n no funciona, retrocede (backtrack)\n\/\/ y prueba otra posici\u00f3n.\n\/\/ ------------------------------------------------------------\nbool resolverReinas(int col)\n{\n    \/\/ Si ya colocamos reinas en todas las columnas,\n    \/\/ significa que encontramos una soluci\u00f3n v\u00e1lida.\n    if(col &gt;= N)\n        return true;\n\n    \/\/ Intentar colocar la reina en cada fila\n    \/\/ de la columna actual.\n    for(int i = 0; i &lt; N; i++)\n    {\n        \/\/ Verificar si la posici\u00f3n es segura.\n        if(esSeguro(i, col))\n        {\n            \/\/ Colocamos la reina.\n            tablero&#x5B;i]&#x5B;col] = 1;\n\n            \/\/ Intentamos colocar la siguiente reina\n            \/\/ en la siguiente columna.\n            if(resolverReinas(col + 1))\n                return true;\n\n            \/\/ Si no se pudo encontrar soluci\u00f3n,\n            \/\/ quitamos la reina (backtracking)\n            \/\/ y probamos otra fila.\n            tablero&#x5B;i]&#x5B;col] = 0;\n        }\n    }\n\n    \/\/ Si ninguna fila funcion\u00f3 en esta columna,\n    \/\/ devolvemos false para retroceder.\n    return false;\n}\n\n\n\/\/ ------------------------------------------------------------\n\/\/ Funci\u00f3n: imprimirTablero\n\/\/ Muestra el tablero en pantalla.\n\/\/ Q representa una reina.\n\/\/ . representa una casilla vac\u00eda.\n\/\/ ------------------------------------------------------------\nvoid imprimirTablero()\n{\n    for(int i = 0; i &lt; N; i++)\n    {\n        for(int j = 0; j &lt; N; j++)\n        {\n            if(tablero&#x5B;i]&#x5B;j] == 1)\n                cout &lt;&lt; &quot;Q &quot;;\n            else\n                cout &lt;&lt; &quot;. &quot;;\n        }\n        cout &lt;&lt; endl;\n    }\n}\n\n\n\/\/ ------------------------------------------------------------\n\/\/ Funci\u00f3n principal del programa.\n\/\/ Inicializa el tablero y llama al algoritmo\n\/\/ que resuelve el problema.\n\/\/ ------------------------------------------------------------\nint main()\n{\n    \/\/ Inicializamos todo el tablero en 0\n    \/\/ (sin reinas).\n    for(int i = 0; i &lt; N; i++)\n        for(int j = 0; j &lt; N; j++)\n            tablero&#x5B;i]&#x5B;j] = 0;\n\n    \/\/ Intentamos resolver el problema\n    \/\/ comenzando por la columna 0.\n    if(resolverReinas(0))\n    {\n        cout &lt;&lt; &quot;Solucion encontrada:\\n\\n&quot;;\n        imprimirTablero();\n    }\n    else\n    {\n        cout &lt;&lt; &quot;No existe solucion.\\n&quot;;\n    }\n\n    return 0;\n}\n<\/pre><\/div>\n\n\n<h1 class=\"wp-block-heading\">Aplicaciones en inform\u00e1tica<\/h1>\n\n\n\n<p>Aunque parezca un simple rompecabezas, este problema se usa para ense\u00f1ar conceptos importantes como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dise\u00f1o de algoritmos<\/li>\n\n\n\n<li>recursividad<\/li>\n\n\n\n<li>optimizaci\u00f3n<\/li>\n\n\n\n<li>inteligencia artificial<\/li>\n\n\n\n<li>b\u00fasqueda en \u00e1rboles de decisi\u00f3n<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusi\u00f3n<\/h1>\n\n\n\n<p>El problema de las nueve reinas es un excelente ejercicio para comprender el funcionamiento de algoritmos de b\u00fasqueda y la t\u00e9cnica de backtracking. A trav\u00e9s de una implementaci\u00f3n relativamente sencilla en C++, es posible resolver un problema combinatorio complejo de manera eficiente.<\/p>\n\n\n\n<p>Este tipo de ejercicios sigue siendo utilizado en cursos de programaci\u00f3n y algoritmos para desarrollar habilidades de pensamiento l\u00f3gico y estructuraci\u00f3n de soluciones computacionales.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El problema de las nueve reinas consiste en colocar 9 reinas en un tablero de ajedrez de 9\u00d79<\/p>\n","protected":false},"author":2,"featured_media":417,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59],"tags":[88,140],"class_list":["post-416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigos","tag-codigos","tag-problemas-matematicos"],"_links":{"self":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts\/416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=416"}],"version-history":[{"count":1,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts\/416\/revisions"}],"predecessor-version":[{"id":418,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts\/416\/revisions\/418"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/media\/417"}],"wp:attachment":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}