public int porownaj(kandydat a) { if (dystans() != a.dystans()) { if (dystans() > a.dystans()) { return(-1); } else { return(1); } } else { if (x > a.dajX()) { return(1); } else { return(-1); } } }
static void Main(string[] args) { var s = new FileInfo(Directory.GetCurrentDirectory()); var s2 = s.Directory.Parent.Parent; String sciezka = s2.ToString() + "\\dane.csv"; List <punkt> punkty = new List <punkt>(); List <punkt> skrajne = new List <punkt>(); List <kandydat> kandydaci = new List <kandydat>(); galaz = new List <linia>(); punkt tmp; using (var reader = new StreamReader(sciezka)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); tmp = new punkt(Convert.ToInt32(values[0]), Convert.ToInt32(values[1])); punkty.Add(tmp); } } punkty.Sort((a, b) => (a.porownaj1(b))); while (punkty.Count > 1) { int miotla = 0; skrajne.Clear(); kandydaci.Clear(); foreach (punkt pu in punkty) { if (pu.dajY() >= miotla) { skrajne.Add(pu); miotla = pu.dajY(); } } if (skrajne.Count() == 1) { punkt jest = skrajne.ElementAt(0); punkt max = new punkt(0, 0); foreach (punkt pun in punkty) { if (pun.porownaj2(max) == -1 && pun.tenSam(jest) == false) { max = pun; } } skrajne.Add(max); } skrajne.Sort((a, b) => (a.porownaj1(b))); for (int i = 1; i < skrajne.Count(); i++) { kandydaci.Add(new kandydat(skrajne.ElementAt(i - 1), skrajne.ElementAt(i))); } kandydaci.Sort((a, b) => (a.porownaj(b))); kandydat wybrany = kandydaci.ElementAt(0); punkt p = wybrany.dajP(); punkt q = wybrany.dajQ(); punkty.Remove(p); punkty.Remove(q); punkt pq = new punkt(wybrany.dajX(), wybrany.dajY()); bool dodano = false; for (int i = 0; i < punkty.Count(); i++) { if (pq.porownaj1(punkty.ElementAt(i)) == -1) { punkty.Insert(i, pq); dodano = true; break; } } if (dodano == false) { punkty.Add(pq); } dodajLinie(p, pq); dodajLinie(q, pq); } punkt r = new punkt(0, 0); dodajLinie(punkty.ElementAt(0), r); foreach (linia l in galaz) { l.napisz(); } Console.ReadKey(); }