public bool solver(Jolka jolka) { int next_zmienna = 0; for (int i = 0; i < jolka.zmienne.Count; i++) { if (jolka.zmienne[i].value.Equals("")) { next_zmienna = i; break; } } if (jolka.used.Count == jolka.words.Count && jolka.checkAllRestr()) { count_results++; if (!second) { Console.WriteLine(count_returns); Console.WriteLine(count_visited); Console.WriteLine(watch.ElapsedMilliseconds); watch.Stop(); //jolka.showGrid(); } second = !second; //return true; } jolka.zmienne[next_zmienna].nextValueBT(); for (int i = 0; i < jolka.zmienne[next_zmienna].values.Count; i++) { /* if (second && jolka.used.Count==0 ) * { * // Console.Write("Used: "); * foreach (string s in jolka.used) * { * Console.Write(s + ", "); * } * }*/ count_visited++; jolka.zmienne[next_zmienna].value = jolka.zmienne[next_zmienna].values[i]; if (!jolka.used.Contains(jolka.zmienne[next_zmienna].value) && jolka.checkAllRestr()) { jolka.used.Add(jolka.zmienne[next_zmienna].values[i]); if (solver(jolka)) { return(true); } else { jolka.used.RemoveAt(jolka.used.Count - 1); jolka.zmienne[next_zmienna].value = ""; count_returns++; } } else { jolka.zmienne[next_zmienna].value = ""; // Console.WriteLine("Ima here"); count_returns++; } } return(false); }
public bool solver(Jolka jolka) { List <string> poss = new List <string>(); if (jolka.notusedZ.Count == 0 && jolka.usedZ.Count == jolka.words.Count && jolka.checkAllRestrFC()) { count_results++; if (!second) { Console.WriteLine(count_returns); Console.WriteLine(count_visited); Console.WriteLine(watch.ElapsedMilliseconds); watch.Stop(); //jolka.showGrid(); } second = !second; //return true; } jolka.addToPossible(); if (!(jolka.notusedZ.Count == 0)) { jolka.notusedZ[0].nextValue(); foreach (string x in jolka.notusedZ[0].possiblevalues) { poss.Add(x); } } for (int i = 0; i < poss.Count; i++) { count_visited++; jolka.notusedZ[0].value = poss[i]; jolka.usedZ.Add(jolka.notusedZ[0]); jolka.notusedZ.RemoveAt(0); if (!jolka.ifused(jolka.usedZ[jolka.usedZ.Count - 1].value) && jolka.checkAllRestr()) { jolka.used.Add(jolka.usedZ[jolka.usedZ.Count - 1].value); if (solver(jolka)) { return(true); } else { jolka.used.RemoveAt(jolka.used.Count - 1); if (jolka.usedZ.Count > 0) { jolka.usedZ[jolka.usedZ.Count - 1].value = ""; jolka.notusedZ.Insert(0, jolka.usedZ[jolka.usedZ.Count - 1]); jolka.usedZ.RemoveAt(jolka.usedZ.Count - 1); } count_returns++; } } else { if (jolka.usedZ.Count > 0) { jolka.usedZ[jolka.usedZ.Count - 1].value = ""; jolka.notusedZ.Insert(0, jolka.usedZ[jolka.usedZ.Count - 1]); jolka.usedZ.RemoveAt(jolka.usedZ.Count - 1); } count_returns++; } } return(false); }