Sayfalar

matlab ile satranç tahtasına 8 vezir yerleştirme


(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