logo
Hoşgeldiniz! Forumun bütün özelliklerini kullanmak için lütfen Giriş ya da Kayıt.

Bildirim

Icon
Error

C# Console Uygulaması Olarak 8 Vezir Problemi
NeRoN Offline
#1 Gönderildi : 15 Ocak 2011 Cumartesi 23:03:08(UTC)
neron



Sıralama: Yönetici


Mesajlar: 9
Puanlar: 27
Konum: Aydın

4 Mesajına Toplam 4 Kere Teşekkür Edildi.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace NQueen.Console

{

    class Program

    {

        // Toplam çözüm sayısını bu değişkende tutacağız

        private static int SolutionCount = 0;

        // Tahtamızın boyutunu buradan belirliyoruz

        private static int BoardSize = 8;

        // Satranç tahtamızı iki boyutlu bir dizi olarak belirliyoruz

        private static int[,] ChessBoard;



        static void Main(string[] args)

        {

            // Çözümleri bul!!!

            FindSolutions();

        }

        /// <summary>

        /// Çözümü bulan ana metodumuz

        /// </summary>

        static void FindSolutions()

        {

            SolutionCount = 0;



            ChessBoard = new int[BoardSize + 1, BoardSize + 1];



            Place(0, 0);

        }

        /// <summary>

        /// col Paramatresi ile belirtilen sütunu temizler (tamamını sıfırlar)

        /// </summary>

        /// <param name="col">Sütun</param>

        static void Initialize(int col)

        {

            for (int i = 0; i < BoardSize; i++)

            {

                for (int j = col; j < BoardSize; j++)

                {

                    ChessBoard[i, j] = 0;

                }

            }

        }

        /// <summary>

        /// Ekran üzerinde çözümü görmemizi sağlar

        /// </summary>

        static void Display()

        {

            int i, j, s;



            // Yeni bir çözüm bulundu! Toplam çözüm sayısını arttır

            SolutionCount += 1;



            s = SolutionCount;



            for (i = 0; i < BoardSize; i++)

            {

                for (j = 0; j < BoardSize; j++)

                {

                    // Mevcut hücre içeriğini ekrana yazdır (0 ya da 1)

                    System.Console.Write(ChessBoard[i, j].ToString() + " ");

                }

                System.Console.WriteLine();

            }

            System.Console.WriteLine();

            System.Console.WriteLine("Diğer çözümü görmek için enter'a basınız!");

            System.Console.ReadLine();

        }

        /// <summary>

        /// row ve col parametreleri ile belirtilen hücreye yeni bir vezirin yerleşip yerleşemeyeceğini test et

        /// </summary>

        /// <param name="row">Satır</param>

        /// <param name="col">Sütun</param>

        /// <returns>True ya da False</returns>

        static bool Can_Place(int row, int col)

        {

            int i, j;

            bool NoConflict;



            NoConflict = true;



            // satırı kontrol et

            for (j = 0; j < col; j++)

            {

                if (ChessBoard[row, j] == 1)

                    NoConflict = false;

            }

            i = row - 1;

            j = col - 1;

            while ((i >= 0) && (j >= 0) && (NoConflict)) //Sol üst çapraz

            {

                if (ChessBoard[i, j] == 1)

                    NoConflict = false;

                i = i - 1;

                j = j - 1;

            }

            i = row + 1;

            j = col - 1;

            while ((i < BoardSize) && (j >= 0) && (NoConflict)) //Sağ alt çapraz

            {

                if (ChessBoard[i, j] == 1)

                    NoConflict = false;

                i = i + 1;

                j = j - 1;

            }

            return NoConflict;

        }

        /// <summary>

        /// row ve col ile koordinatları verilen yere yeni bir vezir yerleştirir ve

        /// eğer son satıra bir vezir yerleştirilmişse çözüm bulunmuştur, bulunan çözümü gösterir

        /// </summary>

        /// <param name="row">Satır</param>

        /// <param name="col">Sütun</param>

        static void Place(int row, int col)

        {

            if (col == BoardSize)

                Display();

            else

            {

                do

                {

                    Initialize(col);

                    if (Can_Place(row, col))

                    {

                        ChessBoard[row, col] = 1;

                        Place(0, col + 1);

                    }

                    row++;

                } while ((row < BoardSize));

            }

        }

    }

}

 

NeRoN: 1 Kişi mesajın için Teşekkür Etti.
@butun 21.03.2012(UTC) tarihinde
@butun Offline
#2 Gönderildi : 20 Ocak 2011 Perşembe 09:11:54(UTC)
@butun



Sıralama: Yönetici

Madalyalar:
Anahtar Kişi: Forumda anahtar rol oynayan kullanıcılara verilirAltın Madalya: Forumda üstün hizmetleri olan kullanıcılara verilirKod Erişimi: Forum kodlarına doğrudan erişimi bulunan kullanıcılara verilirVeritabanı Erişimi: Forum veri tabanına doğrudan erişimi olan kullanıcılara verilirSistemin Efendisi: Sisteminin tamamına hükmeden kullanıcılara verilir

Mesajlar: 1,852
Puanlar: 12,672
Konum: Istanbul

Thanks: 23 times
17 Mesajına Toplam 26 Kere Teşekkür Edildi.

 N adet vezir satranç tahtasına nasıl yerleştirilir?


Sorusunun cevabı için ise, görsel olarak Windows Forms olarak hazırlanan uygulama için, lütfen aşağıdaki linki takip edin arkadaşlar,


 


 

Linkleri görebilmek için lütfen siteye üye olunuz!

 

Bu konudaki kullanıcılar
Ziyaretçi
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.