Nadesłany przez Tomasz Lubiński, 25 sierpnia 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Konik.java:
/* Problem konika (skoczka) szachowego www.algorytm.org Adam Mika, Tomasz Lubinski (c) 2008 Algorytm podaje pierwsze dopuszczalne rozwiązanie problemu dla podanego punktu startowego pod warunkiem, że takie rozwiązanie istnieje. */ public class Konik { /** Problem konika (skoczka) szachowego www.algorytm.org Adam Mika, Tomasz Lubinski (c) 2008 Algorytm podaje pierwsze dopuszczalne rozwiązanie problemu dla podanego punktu startowego pod warunkiem, że takie rozwiązanie istnieje. */ public static void main(String[] args) { int max = 8; //rozmiar problemu - wymiar szachownicy int tab[][] = new int[max][max]; for(int i=0 ; i<max ; i++) for(int j=0 ; j<max ; j++) tab[i][j] = 0; if (skoczek(tab, max, 0, 0, 1) == true) { for(int i=0 ; i<max ; i++) { for(int j=0 ; j<max ; j++) System.out.print(tab[j][i] + " "); System.out.println(); } } } private static boolean ruch(int tab[][], int N, int wariant, int x, int y, int nx[], int ny[]) { switch (wariant) { case 1: nx[0] = x+1; ny[0] = y-2; break; case 2: nx[0] = x+2; ny[0] = y-1; break; case 3: nx[0] = x+2; ny[0] = y+1; break; case 4: nx[0] = x+1; ny[0] = y+2; break; case 5: nx[0] = x-1; ny[0] = y+2; break; case 6: nx[0] = x-2; ny[0] = y+1; break; case 7: nx[0] = x-2; ny[0] = y-1; break; case 8: nx[0] = x-1; ny[0] = y-2; break; } if (0<=nx[0] && nx[0]<N && 0<=ny[0] && ny[0]<N && tab[nx[0]][ny[0]]==0) return true; return false; } public static boolean skoczek(int tab[][], int n, int x, int y, int ktory) { int nx[] = new int[1]; int ny[] = new int[1]; nx[0] = 0; ny[0] = 0; tab[x][y] = ktory; if(ktory == n*n) { return true; } else { for(int w=1 ; w<9 ; w++) if(ruch(tab, n, w, x, y, nx, ny) == true) if (skoczek(tab, n, nx[0], ny[0], ktory+1) == true) return true; tab[x][y] = 0; } return false; } }