Şimdi Ara

8 vezir problemini çözen c programı

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
3.364
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkdaşlar ben 8 vezir problemini çözen c progamını yazmaya çalışıyorum.

    8 vezir problemi:

    8x8 lik bir santranç tahtasına 8 vezir tek hamlede birbirini yiyemeyecek şekilde kaç farklı şekilde yerleştirilebilir ?

    program da ki yol :

    1)santranç tahtasını koordinat düzlemi gibi düşünelim
    2) 2 vezirin birbirlerini yemesi için iki nokta olarak oluşturdukları doğrunun eğiminin 1 , -1 ,0 ve ya sonsuz(doğru y eksenine paralelken ) olması gerekir.

    bu nedenle ilk önce eğim fonksyonunu yazdım bu şartlar sağlanırsa sonuc a 1 sağlanmazsa 0 değerini veriyor.

    3) Bütün olasılıkları denemek için iç içe for döngüleri yazdım.

    4)her defasında onları kontrol ettirdim.

    5)uygun olanları yazdırdım

    Fakat program hemen açılıp kapanıyor durdurmak içn kodlar yazdım fakat işlemedi.Syntax hatası da almıyorum zaten.Sizce bu koddaki hata nedir ??

    işte kod

    #include<stdio.h> 
    #include<stdlib.h>
    void egim (int x1,int y1,int x2,int y2, int sonuc)
    {

    if(x2 - x1 != 0 && y1 - y2 != 0 && x2 - x1 != y1 - y2 && x2 - x1 != (y2 -y1))
    {
    sonuc = 1;
    }
    if (x2 - x1 == 0 || y1 - y2 == 0 || x2 - x1 == y1 - y2 || x2 - x1 == (y2 -y1) )
    {
    sonuc = 0;

    }

    }


    /*______________________________________________________________________________*/
    main()
    {
    int sonuc1[28];
    int sonuc2[28];
    int a,b,c,e,f;
    int d =0;
    int toplam = 0;
    int vezir_x[8];
    int vezir_y[8];
    int t;

    for(vezir_x[1] = 1; vezir_x[1] < 9;vezir_x[1]++)
    {
    for(vezir_y[1] = 1; vezir_y[1] < 9;vezir_y[1]++)
    {
    for(vezir_x[2] = 1; vezir_x[2] < 9;vezir_x[2]++)
    {
    for(vezir_y[2] = 1; vezir_y[2] < 9;vezir_y[2]++)
    {
    for(vezir_x[3] = 1; vezir_x[3] < 9;vezir_x[3]++)
    {
    for(vezir_y[3] = 1; vezir_y[3] < 9;vezir_y[3]++)
    {
    for(vezir_x[4] = 1; vezir_x[4] < 9;vezir_x[4]++)
    {
    for(vezir_y[4] = 1; vezir_y[4] < 9;vezir_y[4]++)
    {
    for(vezir_x[5] = 1; vezir_x[5] < 9;vezir_x[5]++)
    {
    for(vezir_y[5] = 1; vezir_y[5] < 9;vezir_y[5]++)
    {
    for(vezir_x[6] = 1; vezir_x[6] < 9;vezir_x[6]++)
    {
    for(vezir_y[6] = 1; vezir_y[6] < 9;vezir_y[6]++)
    {
    for(vezir_x[7] = 1; vezir_x[7] < 9;vezir_x[7]++)
    {
    for(vezir_y[7] = 1; vezir_y[7] < 9;vezir_y[7]++)
    {
    for(vezir_x[8] = 1; vezir_x[8] < 9;vezir_x[8]++)
    {
    for(vezir_y[8] = 1; vezir_y[8] < 9;vezir_y[8]++)
    {
    /* şartlar */


    for(b=1;b<9 ;b++)
    {
    for(c=b+1;c < 9 ;c++)
    {
    egim(vezir_x[b], vezir_y[b], vezir_x[c] ,vezir_y[c], sonuc1[d]);
    d++;
    }
    }

    /* eğimler bulundu */
    /* eğimler kontrol ediliyor */

    for(e=0;e<29;e++)
    {
    toplam = toplam + sonuc1[e];
    }

    if(toplam = 0 )
    {
    for(f=0;f<9;f++)
    {
    printf(" f. vezirin koordinatları %d %d " ,vezir_x[f],vezir_y[f]);
    }
    }
    /* eğimler kontrol edildi ve geçerli vezirlerin koordinatları yazdırıldı*/
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    getchar();
    system("PAUSE");
    scanf("%d",&t);
    }




    yardımlarınız için teşekkürler.







  • Nette "N Queens solution" diye aratırsan birçok kaynak koduna ulaşabilirisn.

    Aşağıdaki c kodu kullanıcıdan vezir sayısı alarak nxn tahtada kaç farklı şekilde yerleştirebileceğinin sayısını veriyor hemde konsol ekranında gösteriyor.

    Umarım işine yarar.

     
    #include<stdio.h>
    #include<stdlib.h>

    void print_solution(int n,int x[]){
    int i,j;
    char c[100][100];
    for(i=1;i<=n;i++)
    {
    for(j=1;j<=n;j++)
    {
    c[i][j]='X';
    }
    }
    for(i=1;i<=n;i++)
    {
    c[i][x[i]] ='Q';
    }
    for(i=1;i<=n;i++)
    {
    for(j=1;j<=n;j++)
    {
    printf("%c\t",c[i][j]);
    }
    printf("\n");
    }
    }

    int place(int x[],int n){

    int i;
    for(i=1;i<n;i++)
    {
    if((x[i] == x[n]) || (i-x[i] == n-x[n]) || (i+x[i]==n +x[n]))
    {
    return 0;
    }
    }
    return 1;
    }

    void nqueens(int n){
    int x[100],count=0,k=1;

    x[k] = 0;

    while(k != 0)
    {
    x[k] +=1;
    while((x[k] <= n) && ( !place(x,k)))
    {
    x[k] +=1;
    }
    if(x[k] <= n)
    {
    if(k == n)
    {
    count++;
    printf("solution:%d\n",count);
    print_solution(n,x);
    }
    else
    {
    k++;
    x[k]=0;
    }
    }
    else
    {
    k--;
    }

    }
    }
    int main()
    {
    int n;
    printf("enter number of queens\n");
    scanf("%d",&n);

    nqueens(n);

    return 0;
    }






  • Soru-9. 8*8 boyutlarında bir M matrisini satranç tahtası gibi görünüz. Girilen K ve L gibi iki değere
    göre bir veziri K. Satır ve L. Sütuna koyduktan sonra, vezirin gidebileceği hücrelere(matris
    elemanlarına) 1 değeri koyan matris programını yazınız.



    KARDESLERİM BU SORUYU C DİLİNDE YAZABİLİRMİSİNİZ (LÜTFEN YARIMMM)
  • furkan59 F kullanıcısına yanıt
    NQueen problemine dinamik programlama ile çözümü buradan bulabilirsin. Github hesabımda paylaştım.

    https://github.com/SezginEge/NQueen



    < Bu mesaj bu kişi tarafından değiştirildi SezginEge -- 14 Aralık 2014; 23:54:03 >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.