Nombre: Problema de las ocho reinas
Descripción:
Este es un codigo desarrollado en C# para el modo consola que resuelve el problema de las ocho reinas en el tablero de ajedrez... es muy instructivo ya que soluciona el problema con el solo uso de "for" lo recomiendo para todos aquellos que quieran adiestrarse en el uso de esta instruccion... el programa esta muy explicito... debe terner en cuenta que este problema habla o mejor dicho trata de hallar las posibles posiciones donde se pueden colocar ocho (8) reinas en un tablero de ajedrez de manera tal que estas no se coman las unas a las otras, es decir que se ubiquen las reinas en pocisiones neutras... el programa mostrara a las reinas como ceros (0) con unos (1) se indicaran las posiciones que ya no son factibles para colocar una pieza... ademas usted mismo podra ingresar en que posicion querra ingresar esa determinada pieza... el llenado del tablero se hara consecuentemente por lineas o filas... las filas estan enumeradas desde cero hasta 1...
URL: http://www.mygnet.net/codigos/csharp/analisis_numericos/problema_de_las_ocho_reinas.2483
Código Fuente:
using System;
namespace problema_AJEDREZ
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
bucle :
int[,] matriz = new int [8,8];
int x;
string posiciones = "";
int contp = 0;
while (contp < 8)
{
for (int i = 0; i < 8; i ++)
{
Console.WriteLine("Ingrese posicion donde colocara la reina en la fila:{0}", i);
x = Int32.Parse(Console.ReadLine());
if ( matriz[i,x] == 0)
{
posiciones = posiciones + ' ' + i + x;
contp ++;
for (int j = 0; j < 8; j ++) //llena la fila de 1
{
matriz[i,j] = 1;
}
for (int c = 0; c < 8; c ++) //llena la columna de 1
{
matriz[c,x] = 1;
}
int l = x;
for (int d = i; d < 8 && l < 8; d ++) // llena diagonal hacia la derecha de 1
{
matriz[d,l] = 1;
l ++;
}
int q = x;
for (int z = i; z < 8 && q >= 0; z ++) // llena diagonal hacia la izquierda
{
matriz[z,q] = 1;
q --;
}
matriz[i,x] = 0;
for (int w = 0; w < 8; w ++){
for (int t = 0; t < 8; t ++){
Console.Write("{0} ", matriz[w,t]);
}
Console.WriteLine();
}
Console.ReadLine();
int contapo = 0;
string posible = "";
int f = i+1;
if (f < 8)
{
for (int m = 0; m < 8; m ++)
{
if (matriz[f,m] == 0)
{
posible = posible + ' ' + m;
contapo ++;
}
}
if (contapo == 0)
{
Console.WriteLine("Ya no existen posiciones libres, el tablero se reiniciara");
Console.ReadLine();
goto bucle;
}
else
{
Console.WriteLine("Las proximas posibles posiciones son: {0}", posible);
Console.ReadLine();
}
}
}
else
{
Console.WriteLine("Posicion no valida, Ingrese otra posicion");
Console.ReadLine();
i --;
}
}
}
Console.WriteLine("Las posiciones neutras son: {0}", posiciones);
Console.ReadLine();
}
}
}