Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
3
Cevap
3424
Tıklama
0
Öne Çıkarma
8 vezir problemini çözen c programı
F
15 yıl
Onbaşı
Konu Sahibi

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.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



F
15 yıl
Yüzbaşı

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





K
11 yıl
Er

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)



S
11 yıl
Er

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 >


Bu mesajda bahsedilenler: @furkan59
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.