Exemplo n.º 1
0
        static void doSirky(uzol uzol)
        {
            var navstivene = new HashSet <String>();

            var rad = new Queue <uzol>();

            rad.Enqueue(uzol);

            var zoznam = new List <uzol>();

            var counter    = 1;
            var vsetkyUzly = 1;

            while (rad.Count > 0)   // pokial je nieco vo fronte
            {
                uzol aktualny = null;

                aktualny = rad.Dequeue();

                if (navstivene.Contains(aktualny.ToString()))
                {
                    continue;
                }

                navstivene.Add(aktualny.ToString());
//                Console.WriteLine(String.Join(",", navstivene));    // vypise co obsahuje hashset

                if (aktualny.vzdialenost == 0)   // ak je cervene auto v cielovej pozicii
                {
                    Console.WriteLine("Nasli sme riesenie:\n");
                    Console.WriteLine(aktualny);
                    Console.WriteLine("Pocet spracovanych uzlov: " + counter + " Pocet rozvitych uzlov: " + vsetkyUzly);
                    Console.WriteLine();

                    vypisKonecneRiesenie(aktualny);

                    return;
                }
                counter++;      // pripocitavaj stavy zakazdym, kolko operacii bolo urobenych

                zoznam.Clear();
                zoznam.AddRange(aktualny.dalsie());

                for (int i = 0; i < zoznam.Count; i++)    // pridavam do radu preskumane uzly
                {
                    var sused = zoznam.ElementAt(i);
                    if (!navstivene.Contains(sused.ToString()))
                    {
                        rad.Enqueue(sused);
                        vsetkyUzly++;
                    }
                }
                aktualny.spracovany = true;     // oznaci uzol za spracovany
            }
            Console.WriteLine("Riesenie neexistuje");

//            Console.WriteLine(String.Join("\n", navstivene));
        }
Exemplo n.º 2
0
        static void vypisKonecneRiesenie(uzol aktualny)
        {
            /* tu chcem vypisat cestu ako sa auticka posuvali a nakoniec dostali do cieloveho stavu */
            Console.WriteLine("Operatory akymi sa auticka dostali do cieloveho stavu:\n");
            var lifo = new Stack <uzol>();

            while (aktualny != null)
            {
                lifo.Push(aktualny);
                aktualny = aktualny.predchodca;
            }

            var posuny = 0;

            while (lifo.Count != 0)
            {
                var  tento = lifo.Pop();
                uzol dalsi;
                if (lifo.Count > 0)
                {
                    dalsi = lifo.Peek();
                }
                else
                {
                    break;
                }

                posuny++;
                for (int i = 0; i < tento.auta.Count; i++)
                {
                    if (tento.auta[i].orientacia == orientacia.h)
                    {
                        var posun = tento.auta[i].x - dalsi.auta[i].x;
                        if (posun < 0)
                        {
                            Console.WriteLine("VPRAVO(" + tento.auta[i].farba + ", " + Math.Abs(posun) + ")");
                        }
                        else if (posun > 0)
                        {
                            Console.WriteLine("VLAVO(" + tento.auta[i].farba + ", " + Math.Abs(posun) + ")");
                        }
                    }
                    else
                    {
                        var posun = tento.auta[i].y - dalsi.auta[i].y;
                        if (posun < 0)
                        {
                            Console.WriteLine("DOLE(" + tento.auta[i].farba + ", " + Math.Abs(posun) + ")");
                        }
                        else if (posun > 0)
                        {
                            Console.WriteLine("HORE(" + tento.auta[i].farba + ", " + Math.Abs(posun) + ")");
                        }
                    }
                }
            }
            Console.WriteLine("\nPocet posunov: " + posuny);
        }
Exemplo n.º 3
0
 public uzol(List <auto> stare, int index, auto nove, uzol predchodca)
 {
     this.predchodca = predchodca;
     spracovany      = false;
     auta            = new List <auto>(stare);
     auta[index]     = nove;
     vzdialenost     = vypocitajVzdialenost();
     text            = ToString();
 }
Exemplo n.º 4
0
        static void doHlbky(uzol uzol)
        {
            var navstivene = new HashSet <string>();

            var zasobnik = new Stack <uzol>();

            zasobnik.Push(uzol);

            var zoznam = new List <uzol>();

            var counter    = 1;
            var vsetkyUzly = 1;

            while (zasobnik.Count > 0) // pokial je nieco v zasobniku
            {
                uzol aktualny = null;

                aktualny = zasobnik.Pop();

                if (navstivene.Contains(aktualny.ToString()))
                {
                    continue;
                }

                navstivene.Add(aktualny.ToString());

                if (aktualny.vzdialenost == 0)   // ak je cervene auto v cielovej pozicii
                {
                    Console.WriteLine("Nasli sme riesenie:\n");
                    Console.WriteLine(aktualny);
                    Console.WriteLine("Pocet spracovanych uzlov: " + counter + " Pocet rozvitych uzlov: " + vsetkyUzly);
                    Console.WriteLine();

                    vypisKonecneRiesenie(aktualny);

                    return;
                }
                counter++;      // pripocitavaj stavy zakazdym, kolko operacii bolo urobenych

                zoznam.Clear();
                zoznam.AddRange(aktualny.dalsie());

                for (int i = 0; i < zoznam.Count; i++)    // pridavam do radu preskumane uzly
                {
                    var sused = zoznam.ElementAt(i);
                    if (!navstivene.Contains(sused.ToString()))
                    {
                        zasobnik.Push(sused);
                        vsetkyUzly++;
                    }
                }
                aktualny.spracovany = true;     // oznaci uzol za spracovany
            }
            Console.WriteLine("Riesenie neexistuje");
        }
Exemplo n.º 5
0
        public List <uzol> dalsie()
        {
            var vysledok = new List <uzol>();        // vytvori novy zoznam uzlov

            for (int i = 0; i < auta.Count; i++)     // iteruj aky je pocet aut (auta je zoznam aut, cize aky je pocet aut v zozname)
            {
                var a = auta[i];
                if (a.orientacia == orientacia.h)
                {
                    if (!a.jeVpravo)
                    {
                        var novyUzol = new uzol(auta, i, a.doprava(), this);
                        if (!novyUzol.jeKolizia() && !novyUzol.uzBolo())
                        {
                            vysledok.Add(novyUzol);
                        }
                    }

                    if (!a.jeVlavo)
                    {
                        var novyUzol = new uzol(auta, i, a.dolava(), this);
                        if (!novyUzol.jeKolizia() && !novyUzol.uzBolo())
                        {
                            vysledok.Add(novyUzol);
                        }
                    }
                }
                else
                {
                    if (!a.jeHore)
                    {
                        var novyUzol = new uzol(auta, i, a.hore(), this);
                        if (!novyUzol.jeKolizia() && !novyUzol.uzBolo())
                        {
                            vysledok.Add(novyUzol);
                        }
                    }

                    if (!a.jeDole)
                    {
                        var novyUzol = new uzol(auta, i, a.dole(), this);
                        if (!novyUzol.jeKolizia() && !novyUzol.uzBolo())
                        {
                            vysledok.Add(novyUzol);
                        }
                    }
                }
            }
            return(vysledok);
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            //var uzol = new uzol(vytvorPociatocnyStav());

            var uzol = new uzol(new List <auto> {
                new auto(farba.cervene, 2, 3, 2, orientacia.h),
                new auto(farba.oranzove, 2, 1, 1, orientacia.h),
                new auto(farba.zlte, 3, 2, 1, orientacia.v),
                new auto(farba.fialove, 2, 5, 1, orientacia.v),
                new auto(farba.zelene, 3, 2, 4, orientacia.v),
                new auto(farba.smodre, 3, 6, 3, orientacia.h),
                new auto(farba.sive, 2, 5, 5, orientacia.h),
                new auto(farba.tmodre, 3, 1, 6, orientacia.v),
//new auto(farba.biele,2,4,5,orientacia.h),
            });

            /*var uzol = new uzol(new List<auto> {
             * new auto(farba.cervene,2,3,4,orientacia.h),
             * new auto(farba.smodre,2,1,1,orientacia.h),
             * new auto(farba.tmodre,3,1,3,orientacia.v),
             * new auto(farba.zlte,2,5,1,orientacia.v),
             * new auto(farba.oranzove,2,5,2,orientacia.h),
             * new auto(farba.zelene,3,4,4,orientacia.v),
             * new auto(farba.ruzove,2,1,5,orientacia.v),
             * new auto(farba.fialove,3,1,6,orientacia.v),
             * new auto(farba.biele,2,4,5,orientacia.h),
             * new auto(farba.sive,2,6,5,orientacia.h),
             * });*/

            /*var uzol = new uzol(new List<auto> {
             * new auto(farba.cervene,2,3,2,orientacia.h),
             * new auto(farba.smodre,2,1,1,orientacia.h),
             * new auto(farba.ruzove,2,1,3,orientacia.v),
             * new auto(farba.zlte,2,3,1,orientacia.v),
             * new auto(farba.oranzove,2,5,1,orientacia.v),
             * new auto(farba.fialove,2,5,2,orientacia.v),
             * new auto(farba.tmodre,3,1,4,orientacia.v),
             * new auto(farba.zelene,2,5,3,orientacia.h),
             * new auto(farba.sive,2,6,3,orientacia.h),
             * new auto(farba.biele,2,5,5,orientacia.v),
             * new auto(farba.cierne,2,3,6,orientacia.v),
             * new auto(farba.lososove,2,5,6,orientacia.v),
             * });*/

            /*var uzol = new uzol(new List<auto> {
             * new auto(farba.cervene,2,3,1,orientacia.h),
             * new auto(farba.cierne,2,1,2,orientacia.v),
             * new auto(farba.oranzove,2,2,3,orientacia.h),
             * new auto(farba.tmodre,2,4,1,orientacia.h),
             * new auto(farba.zelene,2,4,3,orientacia.h),
             * new auto(farba.ruzove,2,5,4,orientacia.v),
             * new auto(farba.smodre,2,1,5,orientacia.h),
             * new auto(farba.fialove,2,2,5,orientacia.h),
             * new auto(farba.sive,3,3,6,orientacia.v),
             * new auto(farba.zlte,2,6,5,orientacia.h),
             * });*/

            Console.WriteLine(uzol);

            doSirky(uzol);
            //doHlbky(uzol);

            Console.ReadKey();
        }