Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }