Sedat DURMUŞ ve Programlama Sanatı
sedatdurmuscomputereng  
 
  n vezirin problemi 14.03.2025 12:51 (UTC)
   
 

       n vezirin nxn lik tabloya tehdit olmadan yerleştirme 
    
     Hemen algoritmaya geçiyorum öncelikle n=8 diyelim örnek üzerinden gidelin öncelikle her satır ve sutuna bir veziri random şeklinde yerleştiriyoruz.Ve ayrıyeten aynı boyutlarda oluşturduğumuz başka bir matristede her karenin kaç vezirin kapsama alanında olduğunu tutmak için kullanıyoruz.Önce ilk satırdaki vezir bulunur ve bulunduğu satırdaki en küçük değerli yere taşınır ve karelerin kapsaması dizisi yeniden değerlendirilir yani güncellenir.Şimdi ise taşıdığımız vezirin satırında başka vezir varmı bakıyoruz varsa onu taşıyoruz.Onun gittiği satirda varsa onu taşıyoruz taki satır sutunda tek olana kadar.Tek olunca en baştaki döngüye tekrar dönüp bu sefer 2. satırda ki veziri bulup aynı işlemi yapıyoruz.Olay bundan ibaret...Şimdi de kodu verelim.İlk yazımda da dediğim gibi kodları artık ya java da yada .net(C#) da vereceğim bu kod javadır.


package n vezir;
import java.util.*;

public class Main {

   
    public static void main(String[] args) {
       fonksiyonlar nesne=new fonksiyonlar();//--------------------fonksiyonların nesnesi

        Scanner cin=new Scanner(System.in);
     char tahta[][];
     int yedek[][];

     int vezirsayisi;
     System.out.println("kaç vezir üzerinde işlem yapacaksınız.");
     System.out.println("vezir sayısı:");
     vezirsayisi=cin.nextInt();
     tahta=new char[vezirsayisi][];
     yedek=new int[vezirsayisi][];
     for(int i=0;i<vezirsayisi;i++){
     tahta[i]=new char[vezirsayisi];
     yedek[i]=new int[vezirsayisi];
     }
     nesne.randumvezir(tahta,vezirsayisi);
     nesne.ekranabas(tahta, vezirsayisi);
     nesne.kesisimsayilari(tahta,yedek,vezirsayisi);
      System.out.println();
     nesne.ekranabaskesisim(yedek,vezirsayisi);
    
     nesne.vezirleriyerlestir(tahta,yedek,vezirsayisi);
     System.out.println();
     nesne.ekranabas(tahta, vezirsayisi);
    }

}
public class fonksiyonlar {
//---------------------------------------------------------------------
public void randumvezir(char tahta[][],int vezirsayisi){

     Random random=new Random();//------------------random nesne
    int satir,sutun,v=0,temp1=0,temp2=0;
   do{
    satir=random.nextInt(vezirsayisi);
    sutun=random.nextInt(vezirsayisi);
  for(int i=0;i<vezirsayisi;i++){
  if(tahta[satir][i]!='v')
      temp1=0;
  else{ temp1=1;
  break;
  }
  }
   for(int i=0;i<vezirsayisi;i++){
  if(tahta[i][sutun]!='v')
      temp2=0;
  else{ temp2=1;
  break;
  }
  }
   if(temp1==0){
   if(temp2==0){
       tahta[satir][sutun]='v';
   v++;
   }
   }

   } while(v!=vezirsayisi);

    for(int i=0;i<vezirsayisi;i++){
for(int j=0;j<vezirsayisi;j++){
if(tahta[i][j]!='v')
    tahta[i][j]='*';
}
    }
    }
public void ekranabas(char tahta[][],int vezirsayisi)
    {
    System.out.print("  ");
    for(int i=0;i<vezirsayisi;i++)
      System.out.print(i+"  ");
    System.out.println();
for(int i=0;i<vezirsayisi;i++){
    System.out.print(i);
for(int j=0;j<vezirsayisi;j++){
System.out.print(" "+tahta[j][i]+" ");
}
System.out.println();
}
}
public void ekranabaskesisim(int yedek[][],int vezirsayisi)
    {
    System.out.print("  ");
    for(int i=0;i<vezirsayisi;i++)
      System.out.print(i+"  ");
    System.out.println();
for(int i=0;i<vezirsayisi;i++){
    System.out.print(i);
for(int j=0;j<vezirsayisi;j++){
System.out.print(" "+yedek[j][i]+" ");
}
System.out.println();
}
}
public void kesisimsayilari(char tahta[][],int tahta2[][],int vezirsayisi){
    int temp=0;
    int satir,sutun;
for(int i=0;i<vezirsayisi;i++)
{
for(int j=0;j<vezirsayisi;j++)
{
    satir=i;
    sutun=j;
for(int k=0;k<vezirsayisi;k++){
    if(tahta[k][satir]=='v')
       temp++; }
for(int k=0;k<vezirsayisi;k++){
    if(tahta[sutun][k]=='v')
       temp++; }
    //çapraz tarama
while(satir!=0&&sutun!=0){
 if(tahta[satir][sutun]=='v'){
     if(tahta[i][j]=='v'){}
         else
     temp++;
    }
 satir--;
 sutun--;
     }
     satir=i;
    sutun=j;
   while(satir!=vezirsayisi&&sutun!=vezirsayisi){
 if(tahta[satir][sutun]=='v'){
     if(tahta[i][j]=='v'){}
         else
     temp++;
    }
 satir++;
 sutun++;
     }
     satir=i;
    sutun=j;
   while(satir!=0&&sutun!=vezirsayisi){
 if(tahta[satir][sutun]=='v'){
     if(tahta[i][j]=='v'){}
         else
     temp++;
    }
 satir--;
 sutun++;
     }
     satir=i;
    sutun=j;
   while(satir!=vezirsayisi&&sutun!=0){
 if(tahta[satir][sutun]=='v'){
     if(tahta[i][j]=='v'){}
         else
     temp++;
    }
 satir++;
 sutun--;
     }
//-----------
    tahta2[i][j]=temp;
    temp=0;
}
}
}
//****************************************************************************
public void vezirleriyerlestir(char tahta[][],int tahta2[][],int vezirsayisi){
    fonksiyonlar nesne2=new fonksiyonlar();
int satir=0,sutun=0,temp=1,max=vezirsayisi,satir2=0;
    for(int i=0;i<vezirsayisi;i++){
        //---------------------------------
       for(int j=0;j<vezirsayisi;j++){
        if(tahta[j][i]=='v'){
            satir=i;
        sutun=j;
        break;
        }
         }
    //****************************************
while(temp==1){
for(int j=vezirsayisi-1;j>=0;j--){
if(tahta[sutun][j]!='v'){
if(tahta2[sutun][j]<=max){
    max=tahta2[sutun][j];
    satir2=j;
}
}
}
max=vezirsayisi;
tahta[sutun][satir2]='v';
tahta[sutun][satir]='*';
satir=satir2;
nesne2.kesisimsayilari(tahta,tahta2,vezirsayisi);
for(int j=0;j<vezirsayisi;j++){
if(j!=sutun){
if(tahta[j][satir]=='v'){
sutun=j;
temp=1;
break;
}
}
 else
     temp=0;
}

nesne2.kesisimsayilari(tahta,tahta2,vezirsayisi);
}
}
}
}


 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INFOMELDUNG_LOGINBOX
Bugün 20 ziyaretçi (91 klik) kişi burdaydı!
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol