4 Nisan 2015 Cumartesi

Sekiz vezir problemi (Ödev 5.3)

public class EightQueens {
 public static void main(String args[]) {
   int N = 8;
 
   int[][] board = new int[N][N];
 
   solve(0, board, N);
 
   for(int i = 0; i < N; i++) {

    for(int j = 0; j < N; j++) {
   
    if(board[i][j]==1) System.out.print("Q ");
     
       else
        System.out.print("* ");
     }
   
     System.out.println();
 
   }

 }

 static boolean solve(int a, int[][] tahta, int N) {
 
 if(a>=N) return true;
 
 for(int i = 0; i < N; i++) {
   
 if(isValid(tahta, a, i, N)) {
   
 tahta[a][i] = 1;
       if(!solve(a+1, tahta, N)) {
     
        tahta[a][i] = 0;
       }
       else
     
        return true;
     }
   
   }

   return false;

 }

 static boolean isValid(int[][] tahta, int x, int y, int N) {

 int i, j;
 
 for(i = 0; i < x; i++)
   
 if(tahta[i][y]==1)
   
       return false;
   i = x - 1;
 
   j = y - 1;
 
   while((i>=0)&&(j>=0))
 
    if(tahta[i--][j--]==1) return false;
 
   i = x - 1;
 
   j = y + 1;
 
   while((i>=0)&&(j<N))
 
    if(tahta[i--][j++]==1) return false;

   return true;

}
}
Ömer Açık

1 yorum:

  1. Son metotdaki {} lari koymadigin icin neyin ne oldugu anlaşilmiyor pek. Onun disinda eline saglik.

    YanıtlaSil