|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.10.2017, 15:53 | #1 |
Пользователь
Регистрация: 10.10.2017
Сообщений: 44
|
Помощь по задаче на Prolog
Здраствуйте, в универе задали задачу: написать программу, которая разместит 10 коней на доске 8х8 так, чтобы ни один из них не бил другого. Пример из методички о 5 ферзях на доске 5х5:
domains queen = q(integer, integer) queens = queen* freelist = integer* board = board(queens, freelist, freelist, freelist, freelist) predicates placeN(integer, board, board) place_a_queen(integer, board, board) nqueens(integer) makelist(integer, freelist) findandremove(integer, freelist, freelist) nextrow(integer, freelist, freelist) clauses nqueens(N) :- makelist(N, L), Diagonal = N*2-1, makelist(Diagonal, LL), placeN(N, board([], L, L, LL, LL), Final), write(Final). placeN(_, board(D, [], [], D1, D2), board(D, [], [], D1, D2)):- !. placeN(N, Board1, Result) :- place_a_queen(N, Board1, Board2), placeN(N, Board2, Result). place_a_queen(N, board(Queens, Rows, Columns, Diag1, Diag2), board([q(R,C)|Queens], NewR, NewC, NewD1, NewD2)):- nextrow(R, Rows, NewR), findandremove(C, Columns, NewC), D1 = N+C-R, findandremove(D1, Diag1, NewD1), D2 = R+C-1, findandremove(D2, Diag2, NewD2). findandremove(X, [X|Rest], Rest). findandremove(X, [Y|Rest], [Y|Tail]):- findandremove(X, Rest, Tail). makelist(1, [1]). makelist(N, [N|Rest]) :- N1 = N-1, makelist(N1, Rest). nextrow(Row, [Row|Rest], Rest). Заранее спасибо! |
11.10.2017, 07:55 | #2 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Так, а что не получается?
Хранишь список коней. Последовательно перебираешь клетки, проверяешь что клетка свободна и не бьется (проверяешь список коней). Ставишь коня. Продолжаешь пока не поставишь нужное число коней... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помощь в задаче | Semyon++ | Общие вопросы C/C++ | 0 | 05.12.2016 19:15 |
С и С++. Помощь в простейшей задаче | VikkyVi | Помощь студентам | 1 | 02.04.2016 17:10 |
Нужна помощь в решении задачи по PROLOG | Sergmaestro | Помощь студентам | 1 | 08.10.2014 05:50 |
нужна помощь в задаче с массивами | frefres | Помощь студентам | 1 | 16.12.2009 21:59 |