Kaydol:
Kayıt Yorumları
(
Atom
)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace sekiz_vezir { class sekiz_vezir { static int cozumSayi = 0; static int[] vezirYerleri; static int vezirSayisi = 8; static void Main(string[] args) { // vezir yerleri tutmak için int tipinde bir dizi olustur vezirYerleri = new int[vezirSayisi]; //birinci vezir yerleştirerek işleme başla vezirYerlestir(0); //Bütün yerleştirme olasılıkları tamamlandığında ekrana sonucu yaz Console.WriteLine("\n\n{0} vezir probleminin {1} adet cozumu vardir.\n", vezirSayisi, cozumSayi); Console.ReadKey(); } static void vezirYerlestir(int vezirSira) { // vezirlerin birbirini yemediği durum oldugunda cozumu ekrana yaz // cozum sayısını bir arttır if (vezirSira == vezirSayisi) cozumuKonsolEkraninaYaz(); else //burada sırayla vezirleri yerleştirip birbirini yiyip yemediği kontrolu yap for (vezirYerleri[vezirSira] = 1; vezirYerleri[vezirSira] < 1 << vezirSayisi; vezirYerleri[vezirSira] <<= 1) if (vezirYerleriTamam(vezirSira)) vezirYerlestir(vezirSira + 1); //bibirini yemediyse bir sonraki veziri yerleştir } static bool vezirYerleriTamam(int vezirSira) { //burada yeni yerleştirilen vezir ile daha önceki yerleştirilen vezirlerin //yerlerini kontrol et eğer birbirlerini yemiyorlarsa True döner //Birbirini yediği ilk durumda False döner for (int r = 0; r < vezirSira; r++) if (vezirYerleri[vezirSira] == vezirYerleri[r] || vezirYerleri[vezirSira] == vezirYerleri[r] << vezirSira - r || vezirYerleri[vezirSira] == vezirYerleri[r] >> vezirSira - r) { return false; } return true; } static void cozumuKonsolEkraninaYaz() { int t, r; Console.WriteLine("\n\n{0}. COZUM \n\n", ++cozumSayi); for (r = 0; r < vezirSayisi; r++) { for (t = 1 << vezirSayisi - 1; t > 0; t >>= 1) Console.Write("{0}", vezirYerleri[r] == t ? 'V' : '-'); Console.WriteLine(); } } } }
Hiç yorum yok :
Yorum Gönder