2014.05.17 04:31
jak odwrócić odwracankę metodą brute force

Oto program w Javie rozwiązujący grę "lights out" metodą brute force:
public class Rozwiazywacz {
    private static final int ROZMIAR = 5;

    private static boolean nastepny(boolean[] ruchy) {
        int i = 0;
        while (i < ruchy.length) {
            ruchy[i] = !(ruchy[i]);
            if (ruchy[i]) {
                return true;
            }
            i++;
        }
        return false;
    }

    public static void main(String[] args) {
        boolean[] ruchy = new boolean[ROZMIAR * ROZMIAR];
        do {
            Plansza p = new Plansza();
            for (int y = 0; y < ROZMIAR; y++) {
                for (int x = 0; x < ROZMIAR; x++) {
                    if (ruchy[y * ROZMIAR + x]) p.ruch(x, y);
                }
            }
            if (p.sukces()) {
                for (int y = 0; y < ROZMIAR; y++) {
                    for (int x = 0; x < ROZMIAR; x++) {
                        if (ruchy[y * ROZMIAR + x]) System.out.println(String.format("(%d, %d)", x, y));
                    }
                }
                System.out.println("\n\n");
            }
        } while (nastepny(ruchy));
    }
}


class Plansza {
    private boolean[][] pola = new boolean[5][5];
    private void obroc(int x, int y) {
        int rozmiar = pola.length;
        if (x < 0 || x >= rozmiar || y < 0 || y >= rozmiar) {
            return;
        }
        pola[x][y] = !pola[x][y];
    }
    
    public boolean pole(int x, int y) {
        return pola[x][y];
    }
    
    public void ruch(int x, int y) {
        obroc(x, y);
        obroc(x + 1, y);
        obroc(x - 1, y);
        obroc(x, y+ 1);
        obroc(x, y - 1);
    }
    
    public int getRozmiar() {
        return pola.length;
    }
    
    public void czysc() {
        pola = new boolean[pola.length][pola.length];
    }
    
    public void ustawRozmiar(int nowyRozmiar) {
        pola = new boolean[nowyRozmiar][nowyRozmiar];
    }
    
    public boolean sukces() {
        for (int y = 0; y < pola.length; y++) {
            for (int x = 0; x < pola.length; x++) {
                if (!pole(x, y)) return false;
            }
        }
        return true;
    }
} 


komentarze:

ksywa:

tu wpisz cyfrę cztery: (tu wpisz cyfrę cztery: (to takie zabezpieczenie antyspamowe))

komentarze wulgarne albo co mi się nie spodobają będę kasował


powrót na stronę główną

RSS