
ФЕДЕРАЛЬНОЕ
АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального образования
«Санкт-Петербургский государственный электротехнический университет
"ЛЭТИ" имени В.И. Ульянова (Ленина)»
Кафедра МО ЭВМ
Отчет по курсовой работе
по дисциплине «Логическое программирование»
Морской бой
Вариант 7
Выполнили студенты группы 4351 Довбыш А.А.
Адамов И.А.
Руководитель Беляев С.А.
Санкт-Петербург
2007 г
1. Постановка задачи
7. Морской бой.
Дан квадрат 10х10 и корабли (1 → 4 шт., 2 → 3 шт., 3 → 2 шт., 4 → 1 шт.). В качестве исходных данных - рифы на карте. Необходимо так разместить корабли (по всем правилам игры), чтобы они не попадали на рифы.
Дополнительные тредования:
- Исходные данные (ИД) читаются из внешнего файла. Несколько вариантов ИД.
- Алгоритм решения должен быть «умнее» полного перебора.
- Пояснительная записка: (а) постановка задачи, (б) описание алгоритма решения, (в) формат исходных данных, (г) текст программы, (д) трассировка важного участка программы на тестовом примере (не более трех страниц).
- Работа выполняется в парах, но защита работы - индивидуальная и по всей программе. Студенты должны быть готовы внести изменения в любой участок кода и в логику программы.
2. Описание алгоритма решения
Инвариант — все корабли должны быть расставлены, если это возможно.
Будем задавать корабли при помощи 4 параметров: координаты XиY(нижняя или левая палуба), количество палуб (занимаемых клеток таблицы) и ориентация (горизонтальная или вертикальная).
При размещении кораблей мы будем начинать поиск возможных решений с клетки с координатами (0,0) (верхний левый угол таблицы). Если данная клетка, а также, возможно необходимые клетки справа или сверху не заняты (нет рифов или других кораблей) и доступны (не выходят за пределы таблицы), то размещаем корабль. Если нам удалось разместить все корабли в таблице, то записываем решение в виде набора параметров всех кораблей.
3. Формат исходных данных
Исходные данные читаются из текстового файла. Файл содержит список координат клеток таблицы, в которых находятся рифы.
Пример входного файла:
[4/0,5/0,4/1,5/1,4/2,5/2,4/3,5/3,0/4,1/4,2/4,3/4,4/4,5/4,6/4,7/4,8/4,9/4,0/5,1/5,2/5,3/5,4/5,5/5,6/5,7/5,8/5,9/5,4/6,5/6,4/7,5/7,4/8,5/8,4/9,5/9].
Графическое представление исходных данных:
\ X Y \ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
|
|
|
|
* |
* |
|
|
|
|
1 |
|
|
|
|
* |
* |
|
|
|
|
2 |
|
|
|
|
* |
* |
|
|
|
|
3 |
|
|
|
|
* |
* |
|
|
|
|
4 |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
5 |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
6 |
|
|
|
|
* |
* |
|
|
|
|
7 |
|
|
|
|
* |
* |
|
|
|
|
8 |
|
|
|
|
* |
* |
|
|
|
|
9 |
|
|
|
|
* |
* |
|
|
|
|