public static Graf NajkrotszeDrzewo(Graf graf, int start) { KolejkaPriorytetowa kolejka = new KolejkaPriorytetowa(); for (int i = 0; i < graf.lista.Count(); i++) { kolejka.Dodaj(graf.lista[i].start); } kolejka.Dodaj(kolejka.Kolejka.Count + 1); int n = kolejka.Dlugosc; int[] cost = new int[n]; int[] prev = new int[n]; for (int i = 0; i < n; i++) { cost[i] = int.MaxValue; } cost[start] = 0; prev[start] = 0; kolejka.Porzadkuj(cost); while (kolejka.Dlugosc != 0) { int u = kolejka.Zdejmij(); for (int i = 0; i < graf.IleKrawedzi(u); i++) { int z = graf.lista[i].koniec; if (kolejka.CzyZawiera(z) && cost[z] > graf.lista[i].wartosc) { cost[z] = graf.lista[i].wartosc; prev[z] = u; } } } List <Krawedz> krawedzieWynik = new List <Krawedz>(); for (int i = 0; i < n; i++) { krawedzieWynik.Add(new Krawedz(i, prev[i], cost[i])); } return(new Graf(krawedzieWynik)); }