Sergen
12 Eylül 2015 Cumartesi
AT TURU BULMACASI
C PROGRAMLAMA DİLİNDE ÇÖZÜMÜ
At Turu bulmacası açıklama:
At, boş bir satranç tahtası üzerinde bir yerdedir ve satranç
kurallarına uygun bir şekilde hareket ederek tahtadaki bütün karelere tam bir kez gitmesi gerekir.
C kodu :
#include
#include
#include
int tahta[8][8][2]= { {{0,2}, {0,3}, {0,4}, {0,4}, {0,4}, {0,4}, {0,3}, {0,2}}, {{0,3}, {0,4}, {0,6}, {0,6}, {0,6}, {0,6}, {0,4}, {0,3}}, {{0,4}, {0,6}, {0,8}, {0,8}, {0,8}, {0,8}, {0,6}, {0,4}}, //tahta koordinatları ve o koordinatın gidebilecegi yer sayısı {{0,4}, {0,6}, {0,8}, {0,8}, {0,8}, {0,8}, {0,6}, {0,4}}, //tahta[][][0] kordinat için tahta[][][1] o koordinatin yapabilecegi hamle {{0,4}, {0,6}, {0,8}, {0,8}, {0,8}, {0,8}, {0,6}, {0,4}}, //sayisi {{0,4}, {0,6}, {0,8}, {0,8}, {0,8}, {0,8}, {0,6}, {0,4}}, {{0,3}, {0,4}, {0,6}, {0,6}, {0,6}, {0,6}, {0,4}, {0,3}}, {{0,2}, {0,3}, {0,4}, {0,4}, {0,4}, {0,4}, {0,3}, {0,2}} }; int Gid_X[8]= {0},Gid_Y[8]= {0},GYS=0; // Gid_X, Gid_Y gidebilecegi yerleri tutan dizi. GYS(gidebilecegi yer sayisi) int sayac=0,konumX,konumY; // konumX konumY anlık konumu; void Eksilt(); // eksilt() degisen konuma göre tahtadan tahta[][][1] hamle sayısı azaltma void tahtagoster(); void GYDoldur(int,int); // gidilen yerleri 1 ile dolduruyoruz void tahtasifirla(); // tekrar etmesi halinde sıfırlama int Gidebilecegi_yerler(int,int); // anlık konuma göre gidebilecegi yerler void Gkarar(int); // hangi hamleyi oynucağını belirleye karar mekanizmasi int main() { int ilkKonumx,ilkKonumy; printf("Atin ilkKonumunu secin: "); scanf("%d %d",&ilkKonumx,&ilkKonumy); tahtasifirla(); sayac=0; konumX=ilkKonumx-1; konumY=ilkKonumy-1; GYDoldur(konumX,konumY); while(sayac<64) { sayac++; printf("%d. hamle (%d,%d) konumunda \n",sayac,konumX+1,konumY+1); GYS=Gidebilecegi_yerler(konumX,konumY); Eksilt(); if(GYS==0 && sayac<64) { printf("(%d,%d) %s \n",ilkKonumx+1,ilkKonumy+1,"At tahtanin her yerini gezmeyi basaramadi \n(tekrar denemek icin t tusuna basýn: "); char tekrar; tekrar=getchar(); // BAŞARISIZ OLMA İHTİMALİNDE HEREŞEYİ SIFIRLAYIP BAŞA DÖNDÜRÜYOR. if(getchar()=='t') { sayac=0; tahtasifirla();printf("Atin ilkKonumunu secin: "); scanf("%d %d",&ilkKonumx,&ilkKonumy);konumX=ilkKonumx-1; konumY=ilkKonumy-1;continue; } } Gkarar(GYS); GYDoldur(konumX,konumY); } if(sayac==64) { printf("(%d,%d) %s\n",ilkKonumx,ilkKonumy,"Basari ile at tahtanin her yerinde dolasti") ; getch(); } } int Gidebilecegi_yerler(int konumX,int konumY) { int X[8]= {2,2,1,1,-1,-1,-2,-2}; int Y[8]= {1,-1,2,-2,2,-2,1,-1}; int i=0,j=0; for(; i<8; i++) { if(konumX+X[i]<8 && konumX+X[i]>=0) if(konumY+Y[i]<8 && konumY+Y[i]>=0) if(tahta[konumX+X[i]][konumY+Y[i]][0]!=1) { Gid_X[j]=konumX+X[i]; Gid_Y[j]=konumY+Y[i]; j++; } } return j; } void Gkarar(int GYS) { int i=0,kucuk=tahta[Gid_X[0]][Gid_Y[0]][1]; konumX=Gid_X[i]; konumY=Gid_Y[i]; for(; i<(GYS); i++) { if(kucuk
Hiç yorum yok:
Yorum Gönder
Ana Sayfa
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder