public void InitGrid(int Dim, bool NewSudokuSolverService = true) { if (GlobalVar.Stato == AppStatus.Starting || GlobalVar.Stato == AppStatus.Waiting) { AppStatus old = GlobalVar.Stato; GlobalVar.Stato = AppStatus.ModifyingGrid; if (NewSudokuSolverService) { sss = new SudokuSolverService(Dim); sss.FinishSudoku += Sss_FinishSudoku; sss.NeedTextBoxMatriceResize += Sss_NeedTextBoxMatriceResize; } try { SudokuSolverTextBoxManager tm = sudokuPanel1.Genera(Dim); ResizeForm(); tm.SetAllCellAs(NumberType.InsertByUser); int i = tm.SetTextBoxIndexs(); sss.TextBoxManager = tm; i++; button1.TabIndex = i; i++; comboBox1.TabIndex = i; comboBox1.Items.Clear(); comboBox1.SelectedIndex = comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviNormaleAsync(); }, "Normale")); comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviRicorsioneAsync(); }, "Ricorsione")); comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviRicorsioneAsync(false); }, "Ricorsione no step")); comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviCombinatoAsync(); }, "Combinato")); comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviCombinatoAsync(false); }, "Combinato no step")); i++; button2.TabIndex = i; i++; button3.TabIndex = i; i++; button4.TabIndex = i; timer1.Interval = 1000; Tempo = new TimeSpanPlus(); } catch (SudokuSolverException ex) { MessageBox.Show(ex.Message); } catch (SudokuPanelException ex) { MessageBox.Show(ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } GlobalVar.Stato = old; } }
bool funzione_ricorsiva(SudokuSolverService m, bool ShowStep = true) { Tuple <int, int> v = m.PosizioneMigliore(); if (v.Item1 == -1) { if (!ShowStep) { m.MatriceToTextBox(); } return(true); } int x = v.Item1; int y = v.Item2; for (int i = 1; i <= mngMat.Dim; i++) { if (m.puo_starci(x, y, i)) { m.SetNumber(x, y, i, NumberType.InsertByProgram); if (ShowStep) { SetTextBoxNumber(x, y, i, NumberType.InsertByProgram); } SudokuSolverService sss = m.clone(); if (funzione_ricorsiva(sss, ShowStep)) { return(true); } } } m.SetNumber(x, y, 0, NumberType.InsertByProgram); if (ShowStep) { SetTextBoxNumber(x, y, 0, NumberType.InsertByProgram); } return(false); }
public SudokuSolverService(SudokuSolverService sss) { mngMat = sss.mngMat.Clone(); mngTxb = sss.mngTxb; }
bool funzione_ricorsiva(SudokuSolverService m,bool ShowStep=true) { Tuple<int,int> v = m.PosizioneMigliore(); if (v.Item1 == -1) { if(!ShowStep) m.MatriceToTextBox(); return true; } int x = v.Item1; int y = v.Item2; for (int i = 1; i <= mngMat.Dim; i++) if (m.puo_starci(x, y, i)) { m.SetNumber(x, y, i, NumberType.InsertByProgram); if (ShowStep) SetTextBoxNumber(x, y, i, NumberType.InsertByProgram); SudokuSolverService sss = m.clone(); if (funzione_ricorsiva(sss, ShowStep)) return true; } m.SetNumber(x, y, 0, NumberType.InsertByProgram); if (ShowStep) SetTextBoxNumber(x, y,0, NumberType.InsertByProgram); return false; }