• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prolog - problem konika szachowego

Object Storage Arubacloud
0 głosów
200 wizyt
pytanie zadane 28 listopada 2017 w Inne języki przez Kubaszy121 Nowicjusz (120 p.)

Witam serdecznie, muszę napisać program w Prologu rozwiązujący problem konika szachowego.
Konik musi odwiedzić każde pole, ale na każdym polu może stanąć tylko 1 raz.
Na razie mam tyle (kod poniżej), teraz powinienem skorzystać chyba z listy, żeby zapamiętać na których polach konik już był, ale właśnie mam z tym problem.

move(X, Y, Xmax, Ymax) :-
X + 1 < Xmax,
Y + 2 < Ymax,
A is X + 1,
B is Y + 2,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move(X, Y, Xmax, Ymax) :-
X + 2 < Xmax,
Y + 1 < Ymax,
A is X + 2,
B is Y + 1,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move(X, Y, Xmax, Ymax) :-
X + 2 < Xmax,
Y - 1 >= 0,
A is X + 2,
B is Y - 1,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move(X, Y, Xmax, Ymax) :-
X + 1 < Xmax,
Y - 2 >= 0,
A is X + 1,
B is Y - 2,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move(X, Y, Xmax, Ymax) :-
X - 1 >= 0,
Y - 2 >= 0,
A is X - 1,
B is Y - 2,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move[X, Y, Xmax, Ymax) :-
X - 2 >= 0,
Y - 1 >= 0,
A is X - 2,
B is Y - 1,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move(X, Y, Xmax, Ymax) :-
X - 2 >= 0,
Y + 1 < Ymax,
A is X - 2,
B is Y + 1,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

move(X, Y, Xmax, Ymax) :-
X - 1 >= 0,
Y + 2 < Ymax,
A is X - 1,
B is Y + 2,
write('X='), write(A),
write('Y='), write(B), nl,
move(A, B, Xmax, Ymax).

 

1 odpowiedź

0 głosów
odpowiedź 29 listopada 2017 przez Snow Początkujący (360 p.)
robiłem coś takiego w VBA. sprawę rozwiązałem w ten sposób:

Założenia:

1) bazowo konik może wykonać 8 ruchów z danego pola (z niektórych mniej)

2)konik musi wiedzieć, gdzie był, gdzie nie może skoczyć i jak może się "cofnąć"

3) konik zawsze próbuje skoczyć w tej samej kolejności - wariant skoku, 8 możliwości(1 skok -góra,lewo, 2 skok - góra,prawo, 3 skok prawo,góra itp.)

 do zadania użyłem 2 tablic:

1 - odzwierciedlająca szachownicę (wszędzie wartości ustawione na 0) oraz dodatkowy margines 2 pól z każdej strony ( wartość ustawiona na 100). szachownica będzie zapisywała numer skoku konika (a jednocześnie numer inny niż 0 będzie oznaczał, że konik już dane pole odwiedził, stąd marginesy - żeby konik nie wyskoczył za szachownicę).

2-  64 elementowa tablica z numerem wariantu skoku (indeks tablicy jest za razem numerem skoku)

jak sprawa wygląda.:

 konik jest w pozycji x,y. w tej pozycji zostaje zapisany numer skoku.

 konik sprawdza czy pierwszy wariant skoku jest możliwy, jeżeli tat to do wariantu skoku pod nr 1 zostaje wprowadzona wartość 1, jeżeli nie sprawdza, czy może użyć drugiego wariantu i tak az do wariantu nr 8.

 

jeżeli nie przeskoczył wszystkich pól a warianty się skończyły cofa się krok wstecz (np w poprzednim kroku wybrany został wariant skoku 4) i stara się użyć następnego wariantu skoku (tutaj nr 5).

konik będzie wykonywał kolejne kroki w przód i wstecz aż obskoczy wszystkie pola, lub sprawdzi wszystkie warianty (nie zawsze będzie możliwe wypełnienie całej szachownicy)

Podobne pytania

0 głosów
0 odpowiedzi 353 wizyt
pytanie zadane 25 grudnia 2019 w Inne języki przez kamasazi98 Początkujący (410 p.)
0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 29 marca 2020 w Inne języki przez eugi Użytkownik (570 p.)
0 głosów
0 odpowiedzi 136 wizyt
pytanie zadane 23 marca 2020 w Inne języki przez atmega2 Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...