예제 #1
0
        public void umim(Stav stav, int kroky)
        {
            bool aktualizace = false;

            //byl jsem j*z v danem stavu?
            if (seznamStavu.ContainsKey(stav))
            {
                int umimKroky;
                //za kolik kroku
                seznamStavu.TryGetValue(stav, out umimKroky);
                if (umimKroky > kroky)
                {
                    //umim to lepe - aktualizace
                    seznamStavu.Remove(stav);
                    seznamStavu.Add(stav, kroky);
                    aktualizace = true;
                }
            }
            else
            {
                //v danem stavu jsem nebyl, poznamenam si, za kolik kroku jej umim
                seznamStavu.Add(stav, kroky);
                StavKroky sk = new StavKroky(stav, kroky);
                fronta.pridej(sk);
                aktualizace = true;
            }

            if (aktualizace)
            {
                //vlozit do tabulky, za kolik umim dane hodnoty
                tabulka.vloz(stav.getA(), kroky);
                tabulka.vloz(stav.getB(), kroky);
                tabulka.vloz(stav.getC(), kroky);
            }
        }
예제 #2
0
 static void prelevani(Stav vychozi)
 {
     //init: umim vychozi stav na 0 kroku
     sk.umim(vychozi, 0);
     //vlozim do fronty stavy, do kterych se dostanu z vychoziho stavu
     prelevej(vychozi, 1);
     //dokud neni fronta prazdna, tak vezmu stav z fronty a budu prelevat
     while (!fronta.jePrazdna())
     {
         StavKroky stakr    = fronta.odeber();
         Stav      aktualni = stakr.getStav();
         int       krok     = stakr.getKroky() + 1;
         prelevej(aktualni, krok);
     }
 }
예제 #3
0
 public void pridej(StavKroky novy)
 {
     fronta.Enqueue(novy);
 }