Sudah lama sejak terakhir posting
karena disibukan oleh tugas-tugas dan project yang menumpuk semester
kemaren akhirnya bisa posting lagi..
Apa sih Knight Tour itu?? pasti uda pada tau semuanya kan. Bagi yang belum tau Knight Tour itu adalah semacam permainan yang mengharuskan kita menjalankan bidak kuda (itu loh yang ada di catur yang bentuk kuda pastinya. Yang jalannya bentuk “L”) melewati semua kotak yang ada di papan catur tanpa ada satu kotak yang dilewati 2 kali. Ngertikan?? pasti pada ngerti dong..
Oke aku bikin program ini menggunakan algoritma Depth First Search, penjelasannya teman-teman bisa lihat disini.
Apa sih Knight Tour itu?? pasti uda pada tau semuanya kan. Bagi yang belum tau Knight Tour itu adalah semacam permainan yang mengharuskan kita menjalankan bidak kuda (itu loh yang ada di catur yang bentuk kuda pastinya. Yang jalannya bentuk “L”) melewati semua kotak yang ada di papan catur tanpa ada satu kotak yang dilewati 2 kali. Ngertikan?? pasti pada ngerti dong..
Oke aku bikin program ini menggunakan algoritma Depth First Search, penjelasannya teman-teman bisa lihat disini.
Jadi program yang saya bikin kayak gini
- public void processKnightTour(int indexX, int indexY, int size){
- int[] x={2,2,-2,-2,1,1,-1,-1};
- int[] y={1,-1,1,-1,2,-2,2,-2};
- countStep=0;
- int indexList,i,j;
- int sizeBoard=size;
- workList = new ArrayList();
- node[indexX][indexY] = 1;
- workList.add(new Coordinate(indexX, indexY));
- current =(Coordinate) workList.get(workList.size()-1);
- boolean statusChild;
- //int nilaiCurrent;
- while(node[current.getRow()][current.getColumn()] != sizeBoard*sizeBoard){
- //nilaiCurrent = node[current.getRow()][current.getColumn()];
- statusChild = false;
- for(int loop=0; loop<8; loop++){
- if(current.getRow()+x[loop]>=0 && current.getRow()+x[loop] < sizeBoard && current.getColumn()+y[loop]>=0 && current.getColumn()+y[loop] < sizeBoard){
- if(node[(current.getRow()+x[loop])][(current.getColumn()+y[loop])]==0){
- workList.add(new Coordinate(current.getRow()+x[loop], current.getColumn()+y[loop], current));
- statusChild = true;
- }
- }
- }
- if(statusChild == true){
- workList.remove(workList.indexOf(current));
- }else{
- after = (Coordinate) workList.get(workList.size()-2);
- if(!current.getParent().equals(after.getParent())){
- for(i=0; i<sizeBoard; i++){
- for(j=0;j<sizeBoard;j++){
- if(node[i][j]>node[after.getParent().getRow()][after.getParent().getColumn()]){
- node[i][j]=0;
- }
- }
- }
- }
- node[current.getRow()][current.getColumn()] = 0;
- workList.remove(workList.size()-1);
- }
- current = (Coordinate) workList.get(workList.size()-1);
- node[current.getRow()][current.getColumn()] = (node[current.getParent().getRow()][current.getParent().getColumn()])+1;
- countStep++;
- }
- }
penjelasannya gini..