/// <summary> /// Metoda řešící sudoku pomocí backtrackingu nevyplněných polí. /// </summary> public bool BruteForceSolving() { GridButton NotSolvedButton = FindEmptyCell(); if (NotSolvedButton == null) { return(true); } if (NotSolvedButton != null) { Sudoku.WhereIWantToFillInNumber = NotSolvedButton; } for (int Number = 1; Number < 10; Number++) { if (Sudoku.CanBeFilledIn(Number, NotSolvedButton, ListOfGridButtonsSolver)) { NotSolvedButton.Text = Number.ToString(); if (BruteForceSolving()) { return(true); } } Sudoku.WhereIWantToFillInNumber = NotSolvedButton; } NotSolvedButton.Text = " "; return(false); }
/// <summary> /// Zobrazí novou nabídku pro doplnění čísel po kliknutí na prázdné pole. Pokud má uživatel zaškrtnuto políčko DoNotHighlightDumbNumbersCheckBox, metoda vyřadí čísla, která zjevně nemá podbarvovat. /// </summary> /// <param name="ButtonName">Tlačítko, na které bylo kliknuto.</param> public void ShowNumberMenu(GridButton ButtonName) { MainMenu.AlreadyLoaded = false; foreach (Button button in Sudoku.ListOfNumbers) { MainMenu.Sudoku.Controls.Remove(button); } Sudoku.ListOfNumbers.Clear(); //Graphics g = CreateGraphics(); // SolidBrush ppap = new SolidBrush(Color.White); //g.FillRectangle(ppap, new Rectangle(400, 140, 160, 160)); for (int i = 1; i < 10; i++) { if (ButtonName.ForeColor == Color.MidnightBlue) { int Row; if (i < 4) { Row = 1; } else if (i > 3 && i < 7) { Row = 2; } else { Row = 3; } int Column; if (36 % i == 0 && i != 4 && i != 1 && i != 2) { Column = 3; } else if (40 % i == 0 && i != 4 && i != 1) { Column = 2; } else { Column = 1; } if (Sudoku.DoHighlightGoodNumbersCheckBox.Checked == true && Sudoku.CanBeFilledIn(i, ButtonName, ListOfGridButtons)) { Sudoku.CreateNewButton(i.ToString(), 360 + Column * 50, 100 + Row * 50, Color.LightGreen); } else { Sudoku.CreateNewButton(i.ToString(), 360 + Column * 50, 100 + Row * 50, Color.LightSlateGray); } Sudoku.CreateNewButton("Vymaž", 420, 300, Color.LightSlateGray); Sudoku.CreateNewButton("Napověz", 420, 350, Color.LimeGreen); } } foreach (Button button in Sudoku.ListOfNumbers) { MainMenu.Sudoku.Controls.Add(button); } //ppap.Dispose(); //g.Dispose(); }