// задача №5 "Хитрая мышь"
// Быков Владислав Андреевич
// email - i596655@yandex.ru
import java.util.Scanner;
public class mouse {
int sum = 0; // счетчик ходов
public static void main(String[] args) {
new mouse();
}
public mouse() {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.close();
if (n % 2 == 0) {
boolean m[][] = new boolean[n][n];
xod(m, 0, 0, n, 0);
System.out.println(sum);
} else
System.out.println(0);
}
void xod(boolean m[][], int i, int j, int n, int k) {
boolean f = true; // f отвечает за информацию о том был ход или нет,
// можно было бы из без нее, через else, но нет
if ((i + 1 < n) && (m[i + 1][j] == false)) { //если сверху не стена и мы там еще не были то идем туда
boolean m1[][] = new boolean[n][n]; // создаем новый массив
for (int r = 0; r < n; r++) // в него переносим значение из старого
for (int t = 0; t < n; t++)
m1[r][t] = m[r][t];
m1[i + 1][j] = true; //запоминаем, клетку в которую пойдем
f = false;
int k1 = k + 1; //увеличиваем количество пройденых ходов
xod(m1, i + 1, j, n, k1); // снова вызываем метод
}
if ((j + 1 < n) && (m[i][j + 1] == false)) { // идем вправо
boolean m1[][] = new boolean[n][n];
for (int r = 0; r < n; r++)
for (int t = 0; t < n; t++)
m1[r][t] = m[r][t];
m1[i][j + 1] = true;
f = false;
int k1 = k + 1;
xod(m1, i, j + 1, n, k1);
}
if ((i - 1 >= 0) && (m[i - 1][j] == false)) { // идем вниз
boolean m1[][] = new boolean[n][n];
for (int r = 0; r < n; r++)
for (int t = 0; t < n; t++)
m1[r][t] = m[r][t];
m1[i - 1][j] = true;
f = false;
int k1 = k + 1;
xod(m1, i - 1, j, n, k1);
}
if ((j - 1 >= 0) && (m[i][j - 1] == false)) { // идем влево
boolean m1[][] = new boolean[n][n];
for (int r = 0; r < n; r++)
for (int t = 0; t < n; t++)
m1[r][t] = m[r][t];
m1[i][j - 1] = true;
f = false;
int k1 = k + 1;
xod(m1, i, j - 1, n, k1);
}
if ((f) && (k == n * n) && (i == 0) && (j == 0)) // количество клеток n*n, начальные клетки 0 0
sum++;
}
}
Вернуться в Олимпиада по программированию
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2