Exemplo n.º 1
0
        /// <summary>
        /// Rekurzivní prohledávání haldy (procházení grafu/lesa apod). Cílem je nalezení nejratší cesty v daném grafu.
        /// </summary>
        //rekurzivni prohledani haldy aby to spojilo cesty s naslednyma,
        //aby to prochazelo prioritni frontu dokad je co prochazet
        public void ProjdiGraf()

        {
            Cesta dosavadniProjitaCesta = prioritniFronta.OdeberPrvek();

            if (dosavadniProjitaCesta == null)
            {
                return;
            }

            //v hranate zavorce je x-ty prvek listu - tady je to ten posledni, posledni projita cesta, tady h
            DataHran h = dosavadniProjitaCesta.NavstiveneHrany.Count == 0 ? null : dosavadniProjitaCesta.NavstiveneHrany[dosavadniProjitaCesta.NavstiveneHrany.Count - 1];

            foreach (DataHran obecnaHrana in ag.VratIncidentniHrany(dosavadniProjitaCesta.AktualniVrchol))
            {
                // preskoci cestu po ktere jsme prisli
                if (obecnaHrana == h)
                {
                    continue;
                }

                // TODO: pokud bude potreba, mohou se vynechat cesty polomu viz kod nize.
                // Je potreba dodat tlacitka pripadne
                // if (obecnaHrana.JeFunkcniCesta == false)
                // {
                //     continue;
                // }

                // Informace je nositel informace, ktera je prioritizovana, tady treba cesta
                // hledam, ktery vrchol se pouzije jako naslednik
                if (dosavadniProjitaCesta.AktualniVrchol == obecnaHrana.PocatekHrany)
                {
                    VlozCestuDoFronty(
                        obecnaHrana.KonecHrany,
                        obecnaHrana,
                        dosavadniProjitaCesta.CenaCeleCesty + obecnaHrana.DelkaHrany,
                        dosavadniProjitaCesta);
                }
                else if (dosavadniProjitaCesta.AktualniVrchol == obecnaHrana.KonecHrany)
                {
                    VlozCestuDoFronty(
                        obecnaHrana.PocatekHrany,
                        obecnaHrana,
                        dosavadniProjitaCesta.CenaCeleCesty + obecnaHrana.DelkaHrany,
                        dosavadniProjitaCesta);
                }
            }

            //pridam do listu vyresenych vrcholu
            VrcholyUzVyresene.Add(dosavadniProjitaCesta.AktualniVrchol);
            ProjdiGraf();
        }
Exemplo n.º 2
0
 public IEnumerable <DataHran> VratIncedencniHrany(string klicVrcholu)
 {
     return(ag.VratIncidentniHrany(klicVrcholu));
 }