Каннибал мен миссионерлер



бет3/10
Дата07.02.2022
өлшемі38,44 Kb.
#84826
түріПрограмма
1   2   3   4   5   6   7   8   9   10
Байланысты:
Каннибал мен миссионерлер
Ассемблерде программалау негіздері, Ассемблерде программалау негіздері
('B'e1)(e2) = (e1)(e2);
(e1)('B'e2) = (e1)(e2);
Лодка не будет приравниваться к людям; ее расположение является независимым измерением. Более хорошая идея - добавлять один символ ('L' или 'R') - для того, чтобы отмечать, находится ли лодка на левом или на правом берегу. Допустим, что вся компания приходит на левый берег реки. Тогда представлением начальной ситуации (состояния) служит:
L(e.Left-bank)(e.Right-bank)
ЗАМЕЧАНИЕ: Для представления миссионеров и каннибалов были использованы символы (обратите внимание на кавычки), а для положения лодки - идентификаторы L и R . Это не имеет большого значения. Обычно программа выглядит лучше, если элементы, которые могут образовать предложение, представлены символами, в то время как символы, используемые отдельно, представлены идентификаторами.
Обратимся теперь ко множеству возможных перемещений. Перемещением является переплывание реки на лодке. Так как лодка может вместить не более двух человек и не может переплывать сама, то имеется пять возможных перемещений, которые будут представлены последовательными номерами в следующей таблице:

Перемещение

В лодку садятся:

1

два миссионера

2

два каннибала

3

миссионер и каннибал

4

миссионер

5

каннибал

Не все перемещения физически возможны в каждом состоянии. Например, если лодка находится на левом берегу и только один миссионер на этом берегу, тогда перемещение 1 невозможно. Но даже если перемещение возможно, следует проверить, является ли оно допустимым, т.е. не приводит ли к убийству. Так как перемещение является трансформацией текущего состояния, то оно определяется как:


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет