önbilgi: http://tr.wikipedia.org/wiki/Sekiz_vezir_bulmacas%C4%B1

#include<conio.h>
#include<stdio.h>
#include<math.h>

#define TRUE 1
#define FALSE 0

int board[20];
int n;

void PrintBoard()
{
    int i, k;
    static int solno=1;

    printf("\\nSolution %d:\\n", solno++);
    for (i = 0; i < n; i++)
    {
        for (k = 0; k < board[i]; k++)
            printf("  ");
        printf("x \\n");
    }
}

int IsPlaceSafe(int row, int col)
{
    int i;

    for(i=0; i<row; i++)
    {
        if( (board[i] == col) || (abs(board[i]-col) == abs(i-row)) )
            return FALSE;
    }
    return TRUE;
}

void NQueens(int row)
{
    int col;

    for(col=0; col<n; col++)
    {
        if(IsPlaceSafe(row, col))
        {
            board[row] = col;
            if(row == n-1) //if it is last row print the solution
                PrintBoard();
            else
                NQueens(row+1);
        }
    }
}

int main()
{
    int i;

    printf("Enter board size: ");
    scanf("%d", &n);

    NQueens(0);
    getch();
    return 0;
}

Kodda anlamadığım bir kaç nokta var eğer açıklayabilen olursa çok sevinirim

1-Diyelim 4 girdik 4x4 tahtamız var kolon ve sütunlarıda 0,1,2,3 diye adlandıralım 0,0 başladık true geldi sonra ikinci satıra geçicek 1,0 ve 1,1 false gelicek 1,2 yi işaretledik.sonra 3. satırda 2,0 2,1 2,2 2,3 hepsi false gelicek. bu aşamada program en başa gidip 0,1 seçmesi lazım bu olay hangi kod satırında gerçekleşiyor? 2-Diyelim 4x4 tahtada birbirini yiyemeyecek şekilde dizdik en son değerde true geldi,

if(row == n-1) PrintBoard();

ve şu satır çalıştı fakat printboard fonksiyonu bi kere ekrana yazdırdıkdan sonra ikinci solution nasıl geliyor?

soruldu: 21 Kas '14, 18:15

companjera's gravatar image

companjera
1111
cevap kabul oranı: 0%


NQueens metodu işlem bitene kadar kendi kendini tekrar tekrar çağırıyor.Tam olarak anlayabilmen için Recursive Fonksiyon mantığını araştırmalısın.

permanent link

cevaplandı: 24 Kas '14, 10:43

Fatih%20A%C5%9Flamac%C4%B1's gravatar image

Fatih Aşlamacı
1.0k111929
cevap kabul oranı: 14%

Cevap için teşekkürler rekürsif fonksiyon mantığını tekrar okudum 2. sorumu anladım fakat burada backtracking mantığının rekürsif fonksyionla nasıl çalıştığını anlayamadım

(25 Kas '14, 05:36) companjera companjera's gravatar image

Şöyle bir durum olursa algoritma nasıl çalışıyor acaba?

Boyutu 4 girdik. 4x4 tahtamız var. kolon ve sütunlarıda 0,1,2,3 diye adlandıralım 0,0 başladık true geldi sonra ikinci satıra geçicek 1,0 ve 1,1 false gelicek(çünkü dikey de ve çaprazda yiyebiliyor) 1,2 yi işaretledik.sonra 3. satırda 2,0 2,1 2,2 2,3 hepsi false gelicek. bu aşamada program en başa gidip 0,1 seçmesi lazım(tabi board(row) dizisinin elemanlarını silip) bu olay hangi kod satırında gerçekleşiyor?

(25 Kas '14, 05:37) companjera companjera's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1
×1

Soruldu: 21 Kas '14, 18:15

Görüntüleme: 507 kez

Son güncelleme: 25 Kas '14, 05:37

Benzer sorular

powered by BitNami OSQA