N-Queen
Have trying all nite to use recuirsive to do the 8 queen.
walaupun aku dah siap dengan yang tanpa recursive. saja jer nak cube ingat balik recuirsive yang belajar sem lepas. ini yang aku dapat
import java.util.Scanner;
public class myqueen {
public static int solution = 0;public static void main(String args[]){
int[] myqueen = new int[8];
int[][] board = new int[8][8];
//int i;Queen(0,myqueen);
}public static void Queen(int k,int[] myqueen){
int n = 8;
//k adalah untuk bilangan nilai queen dan bertindak sebagai barisan
// dan myqueen sebagai array adalah tempat dimana queen tu disimpan @ lajur ke berapa
Scanner input = new Scanner(System.in);
int i,j;for(i=0;i<myqueen.length;i++){
if(checktest(k,i, myqueen)){ // boleh tak queen di letakkan dalam barisan k dan lajur i?
myqueen[k]=i;// kalau bleh set colum tersebut kedalam nilai arrayif(k==7){//controller untuk recursive. kalau semua queen dah ada atas board baru masuk gelong
PrintQueen(myqueen); // papar generasi ke i(satu-satu)
System.out.println(“Tengok Lagi? [1->Berhenti, Nombor lain->Teruskan] : “); // controler untuk gelung
int mykak = input.nextInt();
//kalau mykak 1 maka keluar dari gelong
if(mykak==1)
System.exit(0);
solution++;
System.out.println(“”+solution);//bilangan solution untuk nxn
}
if(k<7)// kalau queen ada lagi.. teruskan loop. gune recursive panggil balik myqueen untuk update
//System.out.println(“here”);Queen(k+1,myqueen);
}
}}
public static boolean check(int k,int i,int[] x){
int j;
for(j=0;j<k;j++){
if((Math.abs(j-k)==Math.abs(x[j]-i))||(x[j]==i))//cara chek kotak kosong atau ada q dok..
return false;
}
return true;}
public static boolean checktest(int k, int i, int[] x){//int i,j;
//boolean[][] board = new boolean[8][8];
//for(i=0;i<x.length;i++)
// for(i=0;i<x.length;i++){
// for(j=0;j<8;j++){
// if(j==myqueen[i])
// board[j][i]=true;
// }
//}//for (int ni=i-1;ni<=i+1;++ni)
// for (int nj=j-1;nj<=j+1;++nj)
//if (ni>=0&?<10&&nj>=0&&nj<10&&(ni!=i||nj!=j)int j;
for(j=0;j<k;j++){
if((x[j]==i)|| (x[j] + j == k + i) || (x[j] – j == i – k))//cara chek kotak kosong atau ada q dok..
return false;
}
return true;}
public static void PrintQueen(int[] myqueen){int i,j;
System.out.println(” ——————————————————-”);
System.out.println(” “);
System.out.println(” 1 2 3 4 5 6 7 8″);
System.out.println(” —————————————-”);
for(i=0;i<myqueen.length;i++)
//System.out.printf(” %d”,(i+1));
//System.out.println(“”);
for(i=0;i<myqueen.length;i++){
System.out.printf(“%d “,(i+1));
System.out.print(“|”);
for(j=0;j<8;j++){
if(j==myqueen[i])
System.out.print(” Q |”);
else
System.out.print(” |”);
System.out.print(” “);}
System.out.println(“”);
System.out.println(” —————————————-”);
}//System.out.println(” ————————————————-”);
}}
Related posts:
Leave a comment