Но при 1 ?
Операция «искать первое свободное поле…» реализуется маленьким циклом в программе. Вот — на псевдоязыке, используемом в этой книге и близком к Бейсику, LSE и языку Паскаль, — что из всего этого получается:
ТАБЛИЦА с[8], ст[8], дп[15], дм[15]
ДЛЯ
ст[j] = 0
ВЕРНУТЬСЯ
ДЛЯ
дп[
ВЕРНУТЬСЯ
С
И
ВЫПОЛНЯТЬ
ЕСЛИ
КОНЕЦ_ЕСЛИ
ЕСЛИ ст[
дм[
КОНЕЦ_ЕСЛИ
ВЕРНУТЬСЯ
ЕСЛИ i = 9 ТО ПЕРЕЙТИ К СБ КОНЕЦ_ЕСЛИ
СОК
ЕСЛИ
ПЕРЕЙТИ К СБ КОНЕЦ_ЕСЛИ
ст[
дм[
ПЕРЕЙТИ К С
СБ
ЕСЛИ
дм[
ПЕРЕЙТИ К И
Я КОНЕЦ_РАБОТЫ
У вас теперь есть все, что только может быть вам нужно для того, чтобы это заработало на вашем компьютере.
Что касается симметрии, то вот указание. Эта программа заставляет первого ферзя пробежать всю первую строку. Но достаточно, чтобы он пробежал половину, а затем дополнить результат по симметрии. Остановить пробег, когда
Я не знаю простого решения для симметрии относительно диагонали. Если вы найдете такое решение, напишите мне…
Головоломка 21.
Я не вижу способа взяться за эту задачу, существенно отличного от предыдущего. Нужно найти нижнюю границу для числа ферзей. На пустой шахматной доске ферзь может блокировать 28 полей. Следовательно, нужно по крайней мере 3 ферзя, чтобы блокировать доску. Их нужно не больше 7: если вы уже пытались вручную поставить 8 ферзей, то вы должны были убедиться, что шахматная доска часто блокируется до того, как мы смогли поставить восьмого ферзя. Точно так же вероятно, что 6 ферзей должно хватить. Поэтому нужно исследовать отрезок от 3 до 6 ферзей.
Нет никакой уверенности в том, что эти ферзи не должны бить друг друга. Конечно, на шахматной доске есть поля, которые бьются по крайней мере двумя ферзями. Но нужно иметь возможность ограничить поиск решениями, для которых никакие два ферзя не бьют друг друга, или, может быть, немного проще — решениями, для которых никакие два ферзя не стоят на одной строке.
Вы размещаете
Головоломка 22.
Ничего трудного. Нужно перепробовать все комбинации, Берем какую-нибудь шашку домино в качестве начальной шашки цепочки и пробуем шашки одну за другой. Они вынимаются из хранилища, а затем отыскивается первая шашка, которую можно связать с данной, тем же способом, которым отыскивалось первое свободное поле на следующей строке.
Тщательно выберите ваше представление шашек домино.
Головоломка 23.
И на этот раз программирование достаточно просто. Вы задаете крайние члены последовательности:
С помощью уже проведенного рассуждения вы можете зафиксировать
Затем вы размещаете следующие члены в интервале (2,
Вы образуете разности и, если они дают слишком много повторений (вы можете узнать его, не вычисляя всех разностей, что ускоряет тест), вы увеличиваете последний подвижный член
Для последовательности с 5 членами есть только один подлежащий размещению член, и все идет очень быстро. Но сложность растет с ростом