Mehmet Ethem SULAN :: Java Recursive Methods :: How to using Rcursive Method in Java(0 den 8 kadar sayıları 3×3 lük matriste kaç farklı şekilde sıralarız)

Aynı şekilde çözülmüş başka bir örnek. Resimli olarak gösterilmiş.

Şartımız aynı satır ve sütuna aynı sayı gelmeyecek şekilde 0,1,2,3,4,5,6,7,8 sayılarını 3×3 lük matriste kaç farklı şekilde sıralarız?

İlk ve son durum çiktilari:ilk

son

package ethemsulan.com;
import java.util.ArrayList;
public class Puzzle {
	  static int[] dizi=new int[9];
	  static ArrayList kontrol = new ArrayList();

//Durumlar cok fazla(362880 durum) oldugundan hepsini consoleden goremiyoruz.Ilk 5 durumu gostermek<br />
//icin if(ilkBesDurum==5) tek, satirin yorumunu kaldiriniz<br />
	    static int ilkBesDurumuGoster=0;
	    static int sayac=0;
	    public void durumBul(int kutu){
//if(ilkBesDurumuGoster==5){ System.exit(0);}
	        if(kutu==9){
//Kutu 9 oldugunda yani aranan sartlar dizi dolmussa (mesela 0 1 2 3 4 5 6 7 <img src="http://www.ethemsulan.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley"> durum olarak ekrana yaziyor ve sayac artiyor
	            sayac++;
	            ilkBesDurumuGoster++;
	            System.out.print(sayac+" .durumn");
	            int uc=0;
	            String str =null;
	            for(int i=0;i<9;i++)
	            {
	                System.out.print(dizi[i]);
	                str += dizi[i];
	                uc++;
	                if(uc==3){
	                	System.out.println();
	                	uc=0;
	                }
	            }
//Bulunan durum oncekilerle karsilastiriliyor.Eger ayni durum varsa System.exit(0);ile programi durduruyor&lt;br /&gt;<br />
//Ayni durum yoksa else kisminda var olan durumlara ekliyor ki sonra gelenler ile karsilastirilsin.&lt;br /&gt;<br />
	            if( kontrol.contains(str) ){
	            	System.out.println(str +  "daha onceden varmis");
	            	System.exit(0);
	            } else {
	            	kontrol.add(str);
	            }
   System.out.println();
	            return;
	        }
//Bu sayi dizi de kullanildi mi? Cunku bizim sartimiz bir sayi ayni satir ve sutunda 2 sefer kullanilamaz.&lt;br /&gt;<br />
	        for(int i=0;i<9;i++){
	        	if(dahaOnceKullanildiMi(i)==false){
	                continue;
                        
	            }
                    
//Test aradigimiz sart saglaniliyor mu?
	            else if(test(kutu,i)){
	                dizi[kutu]=i;
	                durumBul(kutu+1);
	                dizi[kutu]=-1;
	            }
	        }
	    }
	    public boolean dahaOnceKullanildiMi(int sayi){
	        for(int j=0;j<dizi.length;j++){
	            if(dizi[j]==sayi){
	                return false;
	            }
	        }
        return true;
	    }
		public boolean test(int kutu, int b){
//Ornegin ilk calistiginda ve 0 gelince dizi bos oldugundan (dizi[0]==-1) ilk gelen elamani ekle yani true donder.
	    	if(dizi[kutu]==-1){
	    		return true;
	    	}
//Bunlar link verilen benzer ornekte resimli olarak gosterilmistir.Cunku bu sartlarin anlasilmasi lazim.
	        if(kutu==0 &&(b==4 | b==5 | b==7 | b==8)){
	            return true;
	        }else if(kutu==1 && (b==3 | b==5 | b==6 | b==8)){
	            return true;
	        }else if(kutu==2 &&(b==3 | b==4 | b==6 | b==7)){
	            return true;
	        }else if(kutu==3 &&(b==1 | b==2 | b==7 | b==8)){
	            return true;
	        }else if(kutu==4 &&(b==0 | b==2 | b==6 | b==8)){
	            return true;
	        }else if(kutu==5 &&(b==0 | b==1 | b==6 | b==7)){
	            return true;
	        }else if(kutu==6 &&(b==1 | b==2 | b==4 | b==5)){
	            return true;
	        }else if(kutu==7 &&(b==0 | b==2 | b==3 | b==5)){
	            return true;
	        }else if(kutu==8 &&(b==0 | b==1 | b==3 | b==4)){
	            return true;
	        }
	        return false;
	    }
	    public static void main(String[] args) {
	    	Puzzle nesnem=new Puzzle();
	        for(int i=0;i<9;i++){
	            dizi[i]=-1;
	        }
	         nesnem.durumBul(0);
	    }
}

Orjinal kod

Comments

There is one comment for this post.

  1. Mehmet Ethem SULAN :: Java Programlama Dili :: Javada Recursive Metod Kullanarak A,B,C,D,E,F,G,H,I Harflerini 3×3 lük Matriste Kaç Farklı Şekilde Sıralarız on Ağustos 18, 2010 4:50 pm

    […] Sayılarla yapılmış örneğe bakmak için tıklayın.Ikisinde de aynı mantık var […]

Write a Comment

Let me know what you think?