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); } }
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); } }
public void pridej(StavKroky novy) { fronta.Enqueue(novy); }