All pastes #506652 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-05-24 03:22 UTC
rendered paste body
        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;
		}