Exemple #1
0
 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);
         }
     }
 }
Exemple #2
0
        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();
        }