Tengo el algoritmo, aunque lo pruebo en sudokus 2x2 (más que nada para que no me tarde):
Código C++:
Ver originalbool Resolver(short Tablero[MAX][MAX])
{
vector<pair<int,int> > Casillas;
for (short j = 0; j < MAX;j++)
for (short i = 0; i < MAX;i++)
if (Tablero[i][j] == 0)
Casillas.push_back(make_pair(i,j));
register short Inicio = Casillas.size()-1;
short Actual;
short i;
for (i = 0; i < Casillas.size();i++)
{
Tablero[Casillas[i].first][Casillas[i].second] = 1;
}
while(true)
{
for (i = 1; i < MAX;i++)
{
Tablero[Casillas[Inicio].first][Casillas[Inicio].second] = i;
if (Resuelto(Tablero))
return true;
}
Tablero[Casillas[Inicio].first][Casillas[Inicio].second] = 1;
if (Inicio == 0)
Inicio++;
else
{
Actual = Inicio-1;
Tablero[Casillas[Actual].first][Casillas[Actual].second] ++;
while (Tablero[Casillas[Actual].first][Casillas[Actual].second] > (MAX))
{
Tablero[Casillas[Actual].first][Casillas[Actual].second] = 1;
Actual--;
if (Actual == -1)
{
return false;
}
Tablero[Casillas[Actual].first][Casillas[Actual].second]++;
}
}
}
}
Ahora quiero hacerlo mutihilo, tengo la idea como hacerlo (una casilla prerellenada que tiene su valor entre 9 hilos). Lo que me falta es la parte de implementación.
¿Como saber cuando un hilo ha finalizado? ¿Como paro el resto de hilos sin tener que esperar a que acabe?