Exemple #1
0
        //metoda na pridavani vrcholu
        public void PridejVrchol(K klic, V pridavanyVrchol)
        {
            Vrchol w = new Vrchol();

            w.Data = pridavanyVrchol;
            vsechnyVrcholy.Add(klic, w);
        }
Exemple #2
0
 static void HeapSort(List <Vrchol> pole)
 {
     for (int delka = pole.Count; delka > 0; delka--)
     {
         BuildMinHeap(pole, delka);
         Vrchol a = pole[0];
         pole[0]         = pole[delka - 1];
         pole[delka - 1] = a;
     }
 }
Exemple #3
0
        public static Vrchol ExtractMinCombined(IEnumerable <Vrchol> list)
        {
            Vrchol min = list.First();

            foreach (Vrchol vrchol in list.Skip(1))
            {
                if (vrchol.delkadohromady < min.delkadohromady)
                {
                    min = vrchol;
                }
            }
            return(min);
        }
Exemple #4
0
        public static Vrchol[] Dijkstra(Framework.Bludiste b)
        {
            Vrchol[,] vrcholy = b.VratGraf();
            vrcholy[b.PostavickaX, b.PostavickaY].delka          = 0;           //je tam nula, aby se mi tento prvek vybral pri prvnim volani extractmin
            vrcholy[b.PostavickaX, b.PostavickaY].delkadohromady = 0;
            List <Vrchol> nenavstivene = new List <Vrchol>(vrcholy.OfType <Vrchol>().Where(i => i != null));

            // BuildMinHeap(nenavstivene, nenavstivene.Count);                  //snaha o řešení pomocí haldy - nefunguje

            while (nenavstivene.Count > 0)
            {
                //Vrchol vrchol = ExtractMin(nenavstivene);
                Vrchol vrchol = ExtractMinCombined(nenavstivene);               //Astar feature
                nenavstivene.Remove(vrchol);
                // var v = nenavstivene[0];    //k haldě
                //nenavstivene.RemoveAt(0);     // k haldě
                foreach (Vrchol soused in vrchol.sousede.Where(i => i != null))
                {
                    int temp = vrchol.delka + 1;
                    if (temp < soused.delka)
                    {
                        soused.delka          = temp;
                        soused.delkadohromady = temp + soused.vzdusne;          //Astar feature
                        soused.predchozi      = vrchol;
                    }
                    // BuildMinHeap(nenavstivene, nenavstivene.Count);          //Heap feature
                }
            }

            List <Vrchol> cesta = new List <Vrchol>();
            Vrchol        x     = vrcholy[b.CilX, b.CilY];

            cesta.Add(x);
            while (x.predchozi != null)
            {
                cesta.Add(x.predchozi);
                x = x.predchozi;
            }
            cesta.Reverse();
            return(cesta.ToArray());
        }