Пример #1
0
        public void yolHaritasiGoster(int id)
        {
            pictureBox1.Refresh();
            int onceki = id;

            for (int i = 0; i < sehir[id].yolHaritasi.Count; i++)
            {
                mouseMoveCalisma = false;
                pictureBox1.Update();
                HolyOne.Turkey.City c  = turkey.Cities[sehir[id].yolHaritasi[i] - 1];
                HolyOne.Turkey.City c2 = turkey.Cities[onceki];
                if (i != 0)
                {
                    label5.Text += c2.CityName + " - " + c.CityName + " (" + Zeplin.MesafeHesapla(onceki + 1, sehir[id].yolHaritasi[i]) + ")\n";
                }
                onceki = sehir[id].yolHaritasi[i] - 1;
                g      = pictureBox1.CreateGraphics();
                if (sehir[sehir[id].yolHaritasi[i] - 1].gitmeDurumu)
                {
                    g.FillPolygon(Brushes.OrangeRed, c.CityCoords);
                }
                else
                {
                    g.FillPolygon(Brushes.Turquoise, c.CityCoords);
                }
            }
        }
Пример #2
0
        public void nesneIslemleri()
        {
            for (int i = 0; i < 81; i++)
            {
                string[] veri  = Form1.veriCek(i + 1);
                Sehir    nesne = new Sehir(i + 1, double.Parse(veri[0]), double.Parse(veri[1]), double.Parse(veri[3]));
                sehir.Add(nesne);
            }

            for (int i = 0; i < 81; i++)
            {
                List <Sehir> komsular = new List <Sehir>();
                for (int j = 0; j < 81; j++)
                {
                    if (komsulukKontrol(sehir[i].plaka, sehir[j].plaka) && i != j)
                    {
                        komsular.Add(sehir[j]);
                    }
                }

                sehir[i].komsular = komsular;

                for (int k = 0; k < sehir[i].komsular.Count; k++)
                {
                    sehir[i].komsuMesafe.Add(Zeplin.MesafeHesapla(sehir[i].plaka, sehir[i].komsular[k].plaka));
                }
            }
        }
Пример #3
0
        public void algoritma()
        {
            int   konum = z.baslangicid - 1;
            Sehir min   = new Sehir();
            int   sayac = 0;

            while (durumKontrol() == false)
            {
                sayac++;
                if (sayac == 150)
                {
                    break;
                }
                gidilenYerler.Add(konum + 1);
                Sehir k;
                try
                {
                    k = sehir[konum];
                }
                catch
                {
                    MessageBox.Show("Hata oluştu.Bazı yollar bulunamamış olabilir.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    butonKontrol = false;
                    break;
                }
                for (int i = 0; i < k.komsular.Count; i++)
                {
                    double yeniAgirlik = k.agirlik + Zeplin.MesafeHesapla(k.plaka, k.komsular[i].plaka);
                    if ((sehir[k.komsular[i].plaka - 1].agirlik > yeniAgirlik || sehir[k.komsular[i].plaka - 1].agirlik == 0) && z.giderMi(k.plaka, k.komsular[i].plaka))
                    {
                        if (k.komsular[i].plaka != z.baslangicid)
                        {
                            sehir[k.komsular[i].plaka - 1].agirlik = yeniAgirlik;
                        }
                        sehir[k.komsular[i].plaka - 1].gitmeDurumu = true;
                    }
                }
                for (int i = 0; i < 81; i++)
                {
                    if (gidilenYerler.Contains(sehir[i].plaka) == false && sehir[i].gitmeDurumu == true)
                    {
                        min = sehir[i]; break;
                    }
                }
                for (int i = 0; i < 81; i++)
                {
                    if (min.plaka != sehir[i].plaka && sehir[i].agirlik <= min.agirlik && gidilenYerler.Contains(sehir[i].plaka) == false && sehir[i].gitmeDurumu == true)
                    {
                        min = sehir[i];
                    }
                }

                konum       = min.plaka - 1;
                z.toplamKm  = sehir[z.bitisid - 1].agirlik;
                label6.Text = (sehir[z.bitisid - 1].gitmeDurumu) ? "Toplam Km: " + z.toplamKm.ToString() : "Bitiş Noktasına Ulaşılamadı";
            }
        }
Пример #4
0
        public void yolHaritasiCiz(int id)
        {
            int        sehirbitisID = id + 1;
            List <int> yol          = new List <int>();

            yol.Add(sehir[id].plaka);
            for (int i = gidilenYerler.Count - 1; i > 0; i--)
            {
                int enkucuk = sehir[gidilenYerler[i] - 1].komsular[0].plaka;
                if (komsulukKontrol(sehirbitisID, gidilenYerler[i]) == true && z.giderMi(sehirbitisID, gidilenYerler[i]))
                {
                    enkucuk = gidilenYerler[i];
                }
                for (int j = i - 1; j > 0; j--)
                {
                    if (komsulukKontrol(sehirbitisID, gidilenYerler[j]) == true && (Zeplin.MesafeHesapla(gidilenYerler[j], z.bitisid) < Zeplin.MesafeHesapla(enkucuk, z.bitisid) || Zeplin.MesafeHesapla(gidilenYerler[j], z.baslangicid) < Zeplin.MesafeHesapla(enkucuk, z.baslangicid)) && z.giderMi(sehirbitisID, gidilenYerler[j]))
                    {
                        enkucuk = gidilenYerler[j];
                    }
                }
                //
                sehirbitisID = enkucuk;
                yol.Add(enkucuk);
                if (komsulukKontrol(enkucuk, baslangicID))
                {
                    break;
                }
            }
            yol.Add(z.baslangicid);
            yol.Reverse();
            if (yol.IndexOf(id + 1) != yol.Count - 1)
            {
                yol.RemoveRange(yol.IndexOf(id + 1) + 1, (yol.Count - yol.IndexOf(id + 1) - 1));
            }
            for (int i = 0; i < yol.Count; i++)
            {
                for (int j = i + 1; j < yol.Count; j++)
                {
                    if (yol[i] == yol[j])
                    {
                        yol.RemoveAt(j);
                    }
                }
            }

            for (int i = 0; i < yol.Count - 1; i++)
            {
                if (komsulukKontrol(yol[i], z.bitisid))
                {
                    yol.RemoveRange(i + 1, yol.Count - i - 2);
                }
            }
            sehir[id].yolHaritasi = yol;
        }
Пример #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            string yolcuSayisiString = textBox1.Text;

            if (baslangicID == 0 || bitisID == 0)
            {
                MessageBox.Show("Başlangıç ve bitiş noktası seçilmedi.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (String.IsNullOrEmpty(yolcuSayisiString))
            {
                MessageBox.Show("Yolcu Sayısı Girilmedi.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                textBox1.Clear(); textBox1.Focus();
            }
            else if (int.Parse(yolcuSayisiString) > 50 || int.Parse(yolcuSayisiString) < 5)
            {
                MessageBox.Show("Yolcu Sayısı Belirlenen Aralıkta Değil.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                textBox1.Clear(); textBox1.Focus();
            }
            else
            {
                for (int i = 0; i < 81; i++)
                {
                    List <Sehir> komsular = new List <Sehir>();
                    for (int j = 0; j < 81; j++)
                    {
                        if (komsulukKontrol(sehir[i].plaka, sehir[j].plaka) && i != j)
                        {
                            komsular.Add(sehir[j]);
                        }
                    }
                    sehir[i].komsular.Clear(); sehir[i].komsuMesafe.Clear();
                    sehir[i].komsular = komsular;

                    for (int k = 0; k < sehir[i].komsular.Count; k++)
                    {
                        sehir[i].komsuMesafe.Add(Zeplin.MesafeHesapla(sehir[i].plaka, sehir[i].komsular[k].plaka));
                    }
                }

                yolcuSayisi = int.Parse(yolcuSayisiString);
                z           = new Zeplin(baslangicID, bitisID, yolcuSayisi);
                th          = new Thread(() => algoritma());
                sw.Start();  th.Start();  th.Join();  sw.Stop();
                label12.Text = "Başlangıç Noktası ve Bitiş Noktası için En Kısa Yol Hesaplanıyor";
                label13.Text = sw.ElapsedMilliseconds + " ms";
                label9.Text  = Math.Round(z.karHesapla()) + " ₺";
                if (butonKontrol)
                {
                    button8.Enabled = true;
                }
            }
        }
Пример #6
0
        private void button10_Click(object sender, EventArgs e)
        {
            button10.Enabled = false;
            sw.Start();

            sifirla();
            z.yolcusayisi = 5; z.dereceHesapla(); z.toplamKm = 0;
            th            = new Thread(() => algoritma());
            th.Priority   = ThreadPriority.Highest; th.Start();
            th.Join();
            double enCokKar = z.sabitUcretKar();
            int    yolcu = 5; double gidilenYol = z.toplamKm;

            th.Abort();
            for (int i = 5; i <= 50; i++)
            {
                sifirla();
                z.yolcusayisi = i; z.dereceHesapla(); z.toplamKm = 0;
                Thread yeni_thread = new Thread(() => algoritma());
                yeni_thread.Start();
                yeni_thread.Join();
                if (z.sabitUcretKar() > enCokKar && sehir[z.bitisid - 1].gitmeDurumu == true)
                {
                    enCokKar   = z.sabitUcretKar();
                    yolcu      = i;
                    gidilenYol = z.toplamKm;
                }
                yeni_thread.Abort();
            }
            butonIslemleri(yolcu);
            string yazi = "Cevap: " + yolcu + " / 1 Kişi: " + Zeplin.sabitUcret + "₺ \n Elde Edilen Kar: " + enCokKar + " ₺ \n Toplam Km: " + gidilenYol;

            label11.Text = yazi;

            button8_Click(e, e);
            yaz = new StreamWriter("problem2.txt");
            yaz.WriteLine("Baslangic : " + z.baslangicid + " Bitis : " + z.bitisid + " Yolcu Sayisi : " + z.yolcusayisi);
            yaz.WriteLine(yazi);
            yaz.WriteLine("mesafe / baslangic lat-long / bitis lat-long / baslangic - bitis");
            for (int i = 0; i < sehir[z.bitisid - 1].yolHaritasi.Count; i++)
            {
                if (i != sehir[z.bitisid - 1].yolHaritasi.Count - 1)
                {
                    yaz.WriteLine(Zeplin.MesafeHesapla(sehir[z.bitisid - 1].yolHaritasi[i], sehir[z.bitisid - 1].yolHaritasi[i + 1]) + " / " + Zeplin.lat_baslangic + " - " + Zeplin.lng_baslangic + " / " + Zeplin.lat_bitis + " - " + Zeplin.lng_bitis + " / " + sehir[z.bitisid - 1].yolHaritasi[i] + " - " + sehir[z.bitisid - 1].yolHaritasi[i + 1]);
                }
            }
            yaz.Close();

            sw.Stop();
            label13.Text     = sw.ElapsedMilliseconds + " ms"; label12.Text = "En çok kar için gereken yolcu sayısı hesaplanıyor";
            button10.Enabled = true;
        }
Пример #7
0
        public void problemCoz()
        {
            sifirla();
            z.yolcusayisi = 5; z.dereceHesapla(); z.toplamKm = 0;
            th            = new Thread(() => algoritma());
            th.Priority   = ThreadPriority.Highest; th.Start();
            th.Join();
            double enCokKar = z.sabitUcretKar();
            int    yolcu = 5; double gidilenYol = z.toplamKm;

            th.Abort();
            for (int i = 5; i <= 50; i++)
            {
                sifirla();
                z.yolcusayisi = i; z.dereceHesapla(); z.toplamKm = 0;
                Thread yeni_thread = new Thread(() => algoritma());
                yeni_thread.Start();
                yeni_thread.Join();
                if (z.sabitUcretKar() > enCokKar && sehir[z.bitisid - 1].gitmeDurumu == true)
                {
                    enCokKar   = z.sabitUcretKar();
                    yolcu      = i;
                    gidilenYol = z.toplamKm;
                }
                yeni_thread.Abort();
            }
            sifirla();
            z.yolcusayisi = yolcu; z.dereceHesapla(); z.toplamKm = 0;
            textBox1.Text = yolcu.ToString();
            label4.Text   = ""; label5.Text = "";
            th            = new Thread(() => algoritma()); th.Start();
            string yazi = "Cevap: " + yolcu + " / 1 Kişi: " + Zeplin.sabitUcret + "\n Elde Edilen Kar: " + enCokKar + " ₺ \n Toplam Km: " + gidilenYol;

            label11.Text = yazi;

            th2 = new Thread(() => yolHaritasiCiz(z.bitisid - 1));
            th2.Start(); th2.Join();
            yaz = new StreamWriter("problem2.txt");
            yaz.WriteLine("Baslangic : " + z.baslangicid + " Bitis : " + z.bitisid + " Yolcu Sayisi : " + z.yolcusayisi);
            yaz.WriteLine(yazi);
            yaz.WriteLine("mesafe / baslangic lat-long / bitis lat-long / baslangic - bitis");
            for (int i = 0; i < sehir[z.bitisid - 1].yolHaritasi.Count; i++)
            {
                if (i != sehir[z.bitisid - 1].yolHaritasi.Count - 1)
                {
                    yaz.WriteLine(Zeplin.MesafeHesapla(sehir[z.bitisid - 1].yolHaritasi[i], sehir[z.bitisid - 1].yolHaritasi[i + 1]) + " / " + Zeplin.lat_baslangic + " - " + Zeplin.lng_baslangic + " / " + Zeplin.lat_bitis + " - " + Zeplin.lng_bitis + " / " + sehir[z.bitisid - 1].yolHaritasi[i] + " - " + sehir[z.bitisid - 1].yolHaritasi[i + 1]);
                }
            }
            yaz.Close();
        }
Пример #8
0
        private void button2_Click(object sender, EventArgs e)
        {
            int[]    yolcuSayisi   = { 10, 20, 30, 40, 50 };
            double[] karMiktarlari = new double[5];
            double[] agirliklar    = new double[5];
            for (int i = 0; i < yolcuSayisi.Length; i++)
            {
                butonIslemleri(yolcuSayisi[i]);
                agirliklar[i]    = sehir[z.bitisid - 1].agirlik;
                karMiktarlari[i] = z.karHesapla();
            }
            double eb         = karMiktarlari[0];
            double ek_agirlik = agirliklar[0];

            for (int i = 1; i < karMiktarlari.Length; i++)
            {
                if (karMiktarlari[i] > eb && ek_agirlik < agirliklar[i])
                {
                    eb = karMiktarlari[i];
                }
            }

            butonIslemleri(yolcuSayisi[Array.IndexOf(karMiktarlari, eb)]);
            MessageBox.Show("En iyi sonuç şuanda gösteriliyor.", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            th = new Thread(() => yolHaritasiCiz(z.bitisid - 1));
            th.Start(); th.Join();
            yaz = new StreamWriter("problem1.txt");
            yaz.WriteLine("Baslangic : " + z.baslangicid + " Bitis : " + z.bitisid + " Yolcu Sayisi : " + z.yolcusayisi);
            yaz.WriteLine("Toplam elde edilen kar (1 kişi) : " + eb + " Toplam km : " + z.toplamKm);
            yaz.WriteLine("mesafe / baslangic lat-long / bitis lat-long / baslangic - bitis");
            for (int i = 0; i < sehir[z.bitisid - 1].yolHaritasi.Count; i++)
            {
                if (i != sehir[z.bitisid - 1].yolHaritasi.Count - 1)
                {
                    yaz.WriteLine(Zeplin.MesafeHesapla(sehir[z.bitisid - 1].yolHaritasi[i], sehir[z.bitisid - 1].yolHaritasi[i + 1]) + " / " + Zeplin.lat_baslangic + " - " + Zeplin.lng_baslangic + " / " + Zeplin.lat_bitis + " - " + Zeplin.lng_bitis + " / " + sehir[z.bitisid - 1].yolHaritasi[i] + " - " + sehir[z.bitisid - 1].yolHaritasi[i + 1]);
                }
            }
            yaz.Close();
        }