(Yukarıdaki resim çözümlerinden sadece bir tanesi.)
8 x 8 satranç tahtasına 8 tane veziri birbirini kesmeyecek şekilde yerleştiren program'ın matlab kodları.Vezirler için 30 boşluklar için 0 vezirlerin kestiği alanlar için ise 1 konulmuştur.Program sonunda yerleştirilen vezirler bütün boşlukları kestiği için aşşağıdaki satranç tahtasının son durumunda tüm sıfırlar 1 olmuştur.İlgili arkadaşlara kolay gelsin.
Program çıktı olarak aşşağıdaki gibi ekrana rakamlarla çözümü yazdırmaktadır.
tahta =
1 30 1 1 1 1 1 1
1 1 1 1 30 1 1 1
1 1 1 1 1 1 30 1
1 1 1 30 1 1 1 1
30 1 1 1 1 1 1 1
1 1 1 1 1 1 1 30
1 1 1 1 1 30 1 1
1 1 30 1 1 1 1 1
Ana program
function i = main
tic
drm1=1;
while (drm1 == 1)
tahta = zeros(8,8);
s=0;
v=0;
for x=1:8
if s == 1
break
end
drm=1;
f = 0;
while(drm == 1)
f = f + 1;
if f > 30
s=1;
break
end
y = round(rand(1)*7)+1;
if tahta(x,y) == 0
tahta(x,y)= 30;
tahta = doldur(x,y,tahta);
drm = 0;
v = v + 1;
if (x == 8 || v==8 )
drm1=0;
end
end
end
end
end
tahta
toc
end
prosedür:
function v = doldur(x,y,d)
for a=1:8
if d(x,a) <= 2
d(x,a)=1;
end
if d(a,y)<= 2
d(a,y)= 1;
end
end
x1=x;
y1=y;
for b= 1:8
x1=x1-1;
y1=y1-1;
if (x1==0 || y1==0)
break
end
if d(x1,y1)<=2
d(x1,y1)=1;
end
end
x1=x;
y1=y;
for c=1:8
x1=x1+1;
y1=y1+1;
if (x1==9 || y1==9)
break
end
if d(x1,y1) <= 2
d(x1,y1)=1;
end
end
x1=x;
y1=y;
for c=1:8
x1=x1-1;
y1=y1+1;
if (x1==0 || y1==9)
break
end
if d(x1,y1) <= 2
d(x1,y1)=1;
end
end
x1=x;
y1=y;
for c=1:8
x1=x1+1;
y1=y1-1;
if (x1==9 || y1==0)
break
end
if d(x1,y1) <= 2
d(x1,y1)=1;
end
end
v=d;
end
Hiç yorum yok:
Yorum Gönder