Sprawdź się
Napisz program rozwiązujący problem ośmiu hetmanów i wyświetlający liczbę wszystkich możliwych ustawień hetmanów dla planszy wielkości n x n. Działanie programu przetestuj dla planszy o wymiarach 8 x 8.
Specyfikacja problemu:
Dane:
n– liczba naturalna
Wynik:
licznik– liczba naturalna
Przykładowe rozwiązanie zadania:
import java.lang.Math;
public class Main {
public static int[] h = new int[9];
public static int licznik = 0;
public static int n = 8;
public static void hetman(int wiersz) {
for (int i = 1; i <= n; i++) {
if (h[i] == 0) {
boolean czyAtakowane = false;
for (int j = 1; j <= n; j++) {
if (h[j] != 0 && (Math.abs(i - j) == Math.abs(wiersz - h[j]))) {
czyAtakowane = true;
}
}
if (!czyAtakowane) {
h[i] = wiersz;
if (wiersz < n) {
hetman(wiersz + 1);
} else {
licznik++;
}
h[i] = 0;
}
}
}
}
public static void main(String[] args) {
for (int i = 1; i <= n; i++) {
h[i] = 0;
}
hetman(1);
System.out.println(licznik);
}
}Napisz program wyświetlający ustawienie nieatakujących się n hetmanów dla sytuacji, w której dwa hetmany mają ustalone już swoje pozycje.
Przetestuj program dla 8 hetmanów, z których dwa mają następujące współrzędne:(x1,y1) = (1,8)
(x2,y2) = (8,5)
Specyfikacja problemu:
Dane:
n– liczba naturalna(x1, y1)– para liczb naturalnych dodatnich(x2, y2)– para liczb naturalnych dodatnich
Wynik:
Na standardowym wyjściu wyświetlany jest ciąg liczb naturalnych będący kodem znalezionego ustawienia hetmanów; i-ta cyfra oznacza numer wiersza, na którym znajduje się hetman w i-tej kolumnie.
Przykładowe rozwiązanie zadania:
import java.lang.Math;
public class Main {
public static int[] h = new int[9];
public static int n = 8;
public static void hetman(int wiersz) {
int x1 = 1, y1 = 8;
int x2 = 8, y2 = 5;
for (int i = 1; i <= n; i++) {
if (h[i] == 0) {
boolean czyAtakowane = false;
for (int j = 1; j <= n; j++) {
if (h[j] != 0 && (Math.abs(i - j) == Math.abs(wiersz - h[j]))) {
czyAtakowane = true;
}
}
if (!czyAtakowane) {
h[i] = wiersz;
if (wiersz < n) {
hetman(wiersz + 1);
} else {
if (h[x1] == y1 && h[x2] == y2) {
for (int k = 1; k <= n; k++) {
System.out.print(h[k]);
}
}
}
h[i] = 0;
}
}
}
}
public static void main(String[] args) {
for (int i = 1; i <= n; i++) {
h[i] = 0;
}
hetman(1);
}
}