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:
powrót na stronę główną
RSS