static bool GenGrid(int position, int[,] grid)
{
Random NumRand = new Random();
int num;
//int chosenNum;
int line = position/9;
int col = position%9;
//int position = 0;
bool[] tried = new bool[9];
for(int i=0;i<9;++i)
{
tried[i] = false;
}
for(int i=0;i<9;++i)
{
/* Generer un nombre de 1 a 9 et verifier s'il a deja
* ete essaye, Si oui en obtenir un autre (continue),
* sinon signifier qu'il a ete essaye */
num = NumRand.Next(1, 10);
if(tried[num-1]==true)
{
--i;
continue;
}
else
{
tried[num-1] = true;
}
/* Si le nombre est valide pour la grille, l'inscrire dans la
* grille et appeler GenGrid de nouveau en incrementant la
* position. Sinon, essayer un autre chiffre. */
if(check(grid, line, col, num)==true)
{
if(position==80)
{
grid[line, col] = num;
return true;
}
else
{
grid[line, col] = num;
if (GenGrid(position + 1, grid) == true)
{
//grid[line, col] = num;
return true;
}
else
{
grid[line, col] = 0;
continue;
}
}
}
}
return false; //Tous les chiffres de 1 a 9 ont ete essayes sans succes.
}
static bool check(int[,] p_Grille, int p_Ligne, int p_Col, int p_Nombre)
{
//check la region 3x3
int regionV = (p_Ligne - (p_Ligne % 3));
int regionH = (p_Col - (p_Col % 3));
for (int i = regionV; i < regionV + 3; i++)
{
for (int j = regionH; j < regionH + 3; j++)
{
if (p_Grille[i, j] == p_Nombre)
return false;
}
}
//check ligne
for (int i = 0; i < 9; i++)
{
if (p_Grille[p_Ligne, i] == p_Nombre)
return false;
}
//check colonne
for (int i = 0; i < 9; i++)
{
if (p_Grille[i, p_Col] == p_Nombre)
return false;
}
return true;
}