Exemple #1
0
 private void RechecheSolutions(int lvl, Carre carre)
 {
     foreach (Arrangement argt in arrangements)
     {
         if (!ArrangementCompatibleAvecPositionNombre1(argt, lvl))
         {
             continue;
         }
         if (carre.Compatible(lvl, argt))
         {
             carre[lvl] = argt;
             if (lvl == 3)
             {
                 if (carre.Solution)
                 {
                     solutions.Add(new Carre(carre));
                 }
             }
             else
             {
                 RechecheSolutions(lvl + 1, carre);
             }
         }
     }
 }
Exemple #2
0
 private void SauveSolution(Carre carre, ExcelWorksheet sheet, int idxRow, int idxCol)
 {
     for (int y = 0; y < 4; y++)
     {
         for (int x = 0; x < 4; x++)
         {
             ExcelRange range = sheet.Cells[idxRow + y, idxCol + x];
             range.Value = carre[y][x];
             range.Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin);
             range.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
             range.Style.VerticalAlignment   = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
         }
     }
 }
Exemple #3
0
        public void RechercheArrangements()
        {
            Stopwatch sw = Stopwatch.StartNew();

            arrangements = new List <Arrangement>();
            Arrangement argt = new Arrangement(new int[] { 0, 0, 0, 0 });

            // 2064 arrangements de 4 sur 16 de somme 34, en 4 ms
            RechercheArrangements(0, argt);
            Debug.Print($"{arrangements.Count} arrangements de 4 sur 16 de somme 34, en {sw.ElapsedMilliseconds} ms");
            sw.Restart();
            solutions = new List <Carre>();
            Carre carre = new Carre();

            foreach (Point positionNombre1 in positionsNombre1)
            {
                this.positionNombre1 = positionNombre1;
                RechecheSolutions(0, carre);
            }
            Debug.Print($"{solutions.Count} solutions de carré magique 4x4 avec les nombres 1 à 16, en {sw.ElapsedMilliseconds} ms");
            // 1296 solutions de carré magique 4x4 normaux, en 2h15mn
            SauveSolutions();
        }