14 Nisan 2013 Pazar

C Sharp Uygulamalar Sekiz Vezir Probleminin Çözümü



KONU : C Sharp Uygulamalar - C Sharp ( C# ) Konsol Uygulamaları, Sekiz Vezir probleminin çözümü, c sharp ile Sekiz vezir probleminin çözümü, C sharp 8 vezir probleminin çözümünü.





UYGULAMAYI İNDİR



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




UYGULAMAYI İNDİR

Hiç yorum yok :

Yorum Gönder