//metoda na pridavani vrcholu public void PridejVrchol(K klic, V pridavanyVrchol) { Vrchol w = new Vrchol(); w.Data = pridavanyVrchol; vsechnyVrcholy.Add(klic, w); }
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; } }
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); }
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()); }