Wierzcholek findNext() { Wierzcholek next = kolejka[0]; for (int i = 1; i < kolejka.Count; i++) { if (kolejka[i].d < next.d) { next = kolejka[i]; } } return(next); }
public void stworzGraf(List <Link> links) { Console.WriteLine(DateTime.Now + " RC: Otrzymano LocalTopology od LRM"); // wierzcholki.Add(w); List <Sasiad> sasiedzi = new List <Sasiad>(); Wierzcholek w = new Wierzcholek(links[0].node, sasiedzi); wierzcholki.Add(w); for (int i = 1; i < links.Count; i++) { if (!wierzcholki[wierzcholki.Count - 1].id.Equals(links[i].node)) { List <Sasiad> sas = new List <Sasiad>(); Wierzcholek wierz = new Wierzcholek(links[i].node, sas); wierzcholki.Add(wierz); } } for (int i = 0; i < wierzcholki.Count; i++) { for (int k = 0; k < links.Count; k++) { if (wierzcholki[i].id.Equals(links[k].node)) { if (!links[k].nodeEnd.Equals("e")) { wierzcholki[i].sasiedzi.Add(new Sasiad(links[k].nodeEnd, links[k].linkId, links[k].band, links[k].snpp, links[k].snppEnd)); } } } } /*for (int i = 0; i < wierzcholki.Count; i++) * { * Console.WriteLine("\n\nwierzcholek " + wierzcholki[i].id); * for (int j=0; j<wierzcholki[i].sasiedzi.Count; j++) * { * Console.WriteLine("Sasiad: " + wierzcholki[i].sasiedzi[j].id + ", łącze: " + wierzcholki[i].sasiedzi[j].lacze + ", waga: " + wierzcholki[i].sasiedzi[j].waga); + } + + + }*/ }
List <String> wyliczSciezke(String start, String end) { for (int i = 0; i < wierzcholki.Count; i++) { kolejka.Add(wierzcholki[i]); } int k = find(start); Wierzcholek current = wierzcholki[k]; current.d = 0; while (kolejka.Count > 0) { //Console.WriteLine("wierzcholek " + current.id); for (int i = 0; i < current.sasiedzi.Count; i++) { int w = find(current.sasiedzi[i].id); Wierzcholek next = wierzcholki[w]; // Console.WriteLine("sasiad " + next.id); //Console.WriteLine("nowa waga: " + (current.d + current.sasiedzi[i].waga).ToString()); //Console.WriteLine("stara waga: " + next.d); if (current.sasiedzi[i].waga + current.d < next.d) { next.pop = current.id; next.d = current.sasiedzi[i].waga + current.d; // Console.WriteLine("d" + next.d); // Console.WriteLine("pop" + next.pop); } } kolejka.Remove(current); if (kolejka.Count > 0) { current = findNext(); } } List <String> sciezkaW = new List <String>(); int lacze = 0; List <String> snppSeq = new List <String>(); String snpp = "null"; String snppEnd = "null"; if (KlientNaPoczatku == 1) { snppSeq.Add(dodSnpp); } int a = find(end); Wierzcholek cur = wierzcholki[a]; sciezkaW.Add(cur.id); // Console.WriteLine("CUR id " + cur.id); while (!(cur.pop.Equals("0"))) { for (int i = 0; i < wierzcholki.Count; i++) { if (wierzcholki[i].id.Equals(cur.id)) { int waga = 1000; for (int j = 0; j < wierzcholki[i].sasiedzi.Count; j++) { if (wierzcholki[i].sasiedzi[j].id.Equals(cur.pop)) { if (wierzcholki[i].sasiedzi[j].waga < waga) { lacze = wierzcholki[i].sasiedzi[j].lacze; waga = wierzcholki[i].sasiedzi[j].waga; snpp = wierzcholki[i].sasiedzi[j].snppEnd; snppEnd = wierzcholki[i].sasiedzi[j].snpp; } } } } } snppSeq.Add(snppEnd); //snppSeq.Add(lacze.ToString()); snppSeq.Add(snpp); a = find(cur.pop); cur = wierzcholki[a]; sciezkaW.Add(cur.id); //Console.WriteLine("CUR id " + cur.id); } if (KlientNaPoczatku == 2) { snppSeq.Add(dodSnpp); } Console.Write("" + DateTime.Now + " RC: Ścieżka wyznaczona.\n Węzły:"); for (int i = sciezkaW.Count - 1; i >= 0; i--) { Console.Write(" " + sciezkaW[i]); } Console.WriteLine(snppSeq.Count); Console.Write(" Sekwencja snpp: "); for (int i = snppSeq.Count - 1; i >= 0; i--) { Console.Write(snppSeq[i] + " "); } return(snppSeq); }