jueves, 25 de octubre de 2007

"El codigo libre para hoy"

/*adjunto este codigo que es el fuente (evidentemente hecho bajo C++)
de un tipico sudoku matamatico*/


#include

#include
#include
#include

using namespace std;

ostream& operator<<(ostream& out, vector& v)
{
for(int i=0; i out << v[i] << endl;
return out;
}

class Sudoku
{
vector tablero;

bool valido(char c, int x, int y)
{
for(int i=0; i<4; ++i)
{
if(tablero[x][i]==c)
return false;
if(tablero[i][y]==c)
return false;
}

int x1;
int y1;

if(x==0 || x==1)
x1=0;
else
x1=2;

if(y==0 || y==1)
y1=0;
else
y1=2;

for(int i=x1; i {
for(int j=y1; j {
if(tablero[i][j]==c)
return false;
}
}

return true;
}

public:

Sudoku(vector& t):tablero(t){};

void solucionar(int n)
{
if(n==16)
{
cout << tablero << endl;
return;
}
else if(tablero[n/4][n%4]!='0')
{
solucionar(n+1);
}
else
{
for(char x='1'; x<='4'; ++x)
{
if(valido(x,n/4,n%4))
{
tablero[n/4][n%4] = x;
solucionar(n+1);
tablero[n/4][n%4] = '0';
}
}
}
}
};

int main(int argc, char**argv)
{
ifstream in("sudoku.in");
int casos;
in>> casos;
for(int veces=1; veces<=casos; ++veces)
{
vector tablero (4, string(4,' '));
for(int i=0; i<16; ++i)
{
in>> tablero[i/4][i%4];
}
cout << tablero<< endl;
Sudoku sudoku(tablero);
sudoku.solucionar(0);

}
getchar();
return 0;
}

5 comentarios:

nelcy rubio dijo...

huy que chevere un codigo nuevo,muy interesante.

Anónimo dijo...

al fin se como se debe jugar, gracias

nelcy rubio dijo...

Como es la estrategia del juego?
me dicen porfa....

Anónimo dijo...

y esto que esssss haaaaa

Anónimo dijo...

me parece interezante la programacion