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); } } }
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)); } } }
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ı"; } }
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; }
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; } } }
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; }
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(); }
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(); }