Распределенные вычисления

advertisement
Распределенные вычисления
Лабораторная работа № 4
Сетевое взаимодействие в Windows
Задание
Разделить задания лабораторной работы №1 или №2 или №3 по
указанию преподавателя на два приложения: серверную и клиентскую
части. Или выполнить отдельное задание. Расчеты выполняются на
клиентах, сервер выдает итоговый результат.
Формат сообщений разработать самостоятельно. Реализацию проводить
через пайпы.
Варианты заданий:
1. Задача од инвентаризации по книгам. После нового года в библиотеке
СФУ обнаружилась пропажа каталога. После поиска и наказания,
виноватых ректор дал указание восстановить каталог силами студентов.
Фонд библиотека представляет собой прямоугольное помещение, в
котором находится М рядов по N шкафов по К книг в каждом шкафу.
Требуется создать многопоточное приложение, составляющее каталог.
При решении задачи использовать метод «портфель задач», причем в
качестве отдельной задачи задается внесение в каталог записи об
отдельной книге.
2. Задача о Винни-Пухе или правильные пчелы. В одном лесу живут n пчел
и K медведей, которые используют один горшок меда, вместимостью Н
глотков.
Сначала горшок пустой. Пока горшок не наполнится,
медведь спит. Как только горшок заполняется, медведь просыпается и
съедает весь
мед, после чего снова засыпает. Каждая пчела
многократно собирает по одному глотку меда и кладет его в горшок.
Пчела, которая приносит последнюю порцию меда, будит медведей.
Создать многопоточное приложение, моделирующее поведение пчел и
медведя.
3. Задача о Винни-Пухе, или неправильные пчелы. Неправильные пчелы,
подсчитав в конце месяца убытки от наличия в лесу Винни-Пуха
(количество Винни-Пухов задается параметром), решили разыскать его и
наказать в назидание всем другим любителям сладкого. Для поисков
медведя они поделили лес на участки, каждый из которых прочесывает
одна стая неправильных пчел. В случае нахождения медведя на своем
участке стая проводит показательное наказание и возвращается в улей.
Если участок прочесан, а Винни-Пух на нем не обнаружен, стая также
возвращается
в улей. Требуется создать
приложение, моделирующее
действия пчел.
4. Даны результаты сдачи экзамена по дисциплине «Средства разработки
параллельных программ» по группам. Требуется создать многопоточное
приложение, вычисляющее количество двоечников и отличников. Потоки
должны осуществлять вычисления параллельно по группам. Количество
потоков является входным параметром программы, потоки проводят
вычисления независимо друг от друга, количество групп может быть не
кратно количеству потоков.
5. Задача о каннибалах. Племя из N дикарей ест вместе из
K больших
горшков, который вмешают по M (задается параметром) кусков тушеного
миссионера. Когда дикарь хочет обедать, он встает в очередь к горшку где
раздается очередная порция дикарь встает в меньшую очередь, затем
берет из горшка один кусок. Если еды нет или остался один горшок с
очередью >= M, то дикарь будит одного повара (если есть спящий повар)
и ждет, пока тот не сварит обед в горшке. Работает P поваров, варят обеды
во всех горшках.
Повар засыпает, когда закончил варить свою часть
горшков. Повар спит T времени.
Создать сетевое
приложение,
моделирующее обед дикарей. Каждый дикарь реализуется исполнителем
(клиентом).
6. Вторая
задача
об
Острове
Сокровищ.
Шайка
пиратов
под
предводительством Джона Сильвера высадилась на берег Острова
Сокровищ.
Не
смотря
на
добытую
карту
старого
Флинта,
местоположение сокровищ по-прежнему остается загадкой, поэтому
искать клад приходится практически на ощупь. Так как Сильвер ходит на
деревянной ноге, то самому бродить по джунглям ему не с руки. Джон
Сильвер поделил остров на участки, а пиратов на небольшие группы.
Каждой группе поручается искать клад на нескольких участках, а сам
Сильвер ждет на берегу. Группа пиратов, обшарив одну часть острова,
переходит к другой, еще необследованной части.
Закончив поиски,
пираты возвращаются к Сильверу и докладывают о результатах.
Требуется создать многопоточное приложение с управляющим потоком,
моделирующее действия Сильвера и пиратов. При решении использовать
парадигму портфеля задач.
7. Военная задача. Анчуария, Трипипи и Тарантерия - три крохотных
латиноамериканских государства, затерянных в южных Андах. Диктатор
Анчуарии, дон Федерико, объявил войну диктатору Тарантерии, дону
Эрнандо, а дон Эрнандо объявил войну диктатору Трипипи, дону
Трипи. У диктаторов очень мало солдат, но очень много снарядов для
минометов, привезенных с последней американской гуманитарной
помощью.
территорию
Поэтому
армии
противника,
сторон
надеясь
просто
обстреливают
наугад
поразить
что-нибудь
пенное.
Стрельба ведется по очереди до тех пор, пока либо не будут
уничтожены все цели, либо стоимость потраченных снарядов не
превысит суммарную стоимость всего того, что ими можно уничтожить.
Создать приложение, моделирующее военные действия.
8. Вычислить
данные: числа а
используя метод прямоугольников. Входные
и b. Функция
f(x)
определяется с помощью
программной функции. При суммировании использовать принцип
дихотомии.
9. Найти
определитель
матрицы
А.
Входные
данные:
целые
положительные числа n и m, произвольная матрица А размерности n х m.
Решить задачу двумя способами: 1) количество потоков является входным
параметром, при этом размерность матриц может быть не кратна
количеству потоков: 2) количество потоков заранее неизвестно и не
является параметром задачи. Числа m и n одинаковы.
10.Задача о супермаркете. В супермаркете работают K кассира, покупатели
заходят в супермаркет, делают покупки и становятся в очередь к
случайному кассиру. Пока очередь пуста, кассир спит, как только
появляется покупатель, кассир просыпается. Покупатель спит в очереди,
пока
не
подойдет
к
кассиру.
Создать
сетевое
приложение,
моделирующее рабочий день супермаркета (клиентские программы –
реализуют кассиров). Магазин может расширяться (появляется новый
исполнитель) или сокращаться (закрытие отдела).
11.Задача о магазине. В магазине работают четыре отдела, каждый отдел
обслуживает один продавец. Покупатель, зайдя в магазин, делает
покупки в произвольных отделах, и если в выбранном отделе
продавец не свободен, покупатель становится в очередь и засыпает, пока
продавец
не
освободится.
Создать
многопоточное
приложение,
в
виде
моделирую шее рабочий день магазина.
12.Представить
выражение
.Входные данные: числа а и b. Целое положительное число n. 1)
Количество исполнителей выбирается в зависимости от показателя
степени. 2) Степень определяется количеством исполнителей.
13.Задача о гостинице. В гостинице 50 номеров, клиенты гостиницы
снимают номер на одну ночь, если в гостинице нет свободных номеров,
клиенты устраиваются на ночлег рядом с гостиницей и ждут, пока
любой номер не освободится. Создать многопоточное приложение,
моделирующее работу гостиницы.
14.Задача о гостинице-2 (умные клиенты). В гостинице 2*K (задается
параметром) номеров с ценой 200 рублей, 2*K номеров с ценой 400
рублей и K (задается параметром к серверу) номеров с ценой 600 руб.
Клиент, зашедший в гостиницу, обладает некоторой суммой и получает
номер по своим финансовым возможностям, если тот свободен. Если
среди доступных клиенту номеров нет свободных, клиент уходит
искать ночлег в другое место.
Создать сетевое приложение,
моделирующее работу гостиницы. Каждый исполнитель реализует
номер. Количество номеров может меняться динамически. Менеджер
реализует бесконечную последовательность клиентов. Интенсивность
появления новых клиентов меняется по синусоидальному закону. Решение
о заселении принимает исполнитель.
15.Задача о гостинице - 3 (дамы и джентльмены). В гостинице 15 номеров
рассчитаны на одного человека и 25 номеров рассчитаны на двух человек. В гостиницу приходят клиенты дамы и клиенты джентльмены,
и конечно они могут провести ночь в номере только с представителем
своего пола. Если для клиента не находится подходящего номера, он
уходит искать ночлег в другое место. Создать многопоточное
приложение, моделирующее работу гостиницы.
16.Задача о клумбе. На клумбе растет K (задается параметром к серверу)
цветов, за ними непрерывно следят N садовника и поливают увядшие
цветы, при этом оба садовника очень боятся полить одни и тот же
цветок. При этом нужно учесть, чтобы за проход садовников по клумбе
были
политы
все
цветы.
Создать
многопоточное
приложение,
моделирующее состояния клумбы и действия садовников. Для изменения состояния цветов создать отдельный поток. Садовники поливают
постоянно, прошли весь сад, через небольшой перерыв начинают снова.
17.Задача о нелюдимых садовниках.
Имеется пустой участок земли
(двумерный массив) и план сада, который необходимо реализовать. Эту
задачу выполняют N садовников, которые не хотят встречаться друг с
другом. Первый садовник начинает работу с верхнего левого угла сада и
перемешается слева направо, сделав ряд, он спускается вниз. Второй
садовник начинает работу с нижнего правого угла сада и перемещается
снизу вверх, сделав ряд, он перемещается влево. Третий садовник идет по
пути 1-ого садовника, но если видит готовую работу, идет не
останавливаясь, пока не обгонит 1-ого садовника. 4 – садовник по пути 2
садовника. Если садовник видит, что участок сада уже выполнен другим
садовником, он идет дальше. Садовники должны работать параллельно.
18.Задача о картинной галерее. Вахтер следит за тем, чтобы в картинной
галерее было не более K посетителей. Для обозрения представлены
M картин. Посетитель ходит от картины к картине, и если на картину
любуются более чем десять посетителей, он стоит в стороне и ждет, пока
число желающих увидеть картину не станет меньше. Посетитель
может
покинуть
галерею.
Создать
многопоточное
приложение,
моделирующее работу картинной галереи.
19.Задача о Винни-Пухе - 3 пли неправильные пчелы – 2. N пчел живет в
улье, каждая пчела может собирать мед и сторожить улей (N>3). Ни
одна пчела не покинет улей, если кроме нее в нем нет других пчел.
Каждая пчела приносит за раз одну порцию меда. Всего в улей может
войти M порций меда (задается параметром к серверу). Винни-Пух спит
пока меда в улье меньше половины, но как только его становится
достаточно, он просыпается и пытается достать весь мед из улья. Если
в улье находится менее чем T пчелы, Винни-Пух забирает мед,
убегает, съедает мед и снова засыпает. Если в улье пчел больше, они
кусают Винни-Пуха, он убегает, лечит укус, и снова бежит за медом.
Создать сетевое приложение, моделирующее поведение пчел и медведя.
20.Задача о болтунах. N болтунов имеют телефоны, ждут звонков и звонят
друг другу, чтобы побеседовать. Если телефон занят, болтун будет
звонить, пока ему кто-нибудь не ответит. Побеседовав, болтун не
унимается или ждет звонка или звонит на другой номер. Создать сетевое
приложение, моделирующее
поведение болтунов. Каждый болтун
реализуется клиентом. Болтуны могут входить (запуск нового клиента
пользователем) и выходить (завершения работы клиента пользователем) из
сети.
21.Задача о магазине - 2 (забывчивые покупатели). В магазине работают три
отделов, каждый отдел обладает уникальным ассортиментом. В каждом
отделе работает один продавец. В магазин ходят исключительно забывчивые покупатели, поэтому каждый покупатель носит с собой список
товаров, которые желает купить. Покупатель приобретает товары точно в
том порядке, в каком они записаны в его списке. Продавец может
обслужить только одного покупателя за раз. Покупатель, вставший в
очередь, засыпает пока не дойдет до продавца. Продавец засыпает, если в
его отделе нет покупателей, и просыпается, если появится хотя бы один.
Создать сетевое приложение, моделирующее работу магазина. Каждый
клиент (исполнитель) реализует покупателя. Когда покупатель купил все
по списку, выходит из магазина. Затем исполнитель создает нового
покупателя с новым списком.
22.Задача о программистах. В отделе работают N программистов.
Каждый программист пишет свою программу и отдает ее на проверку
другому программисту. Программист проверяет чужую программу,
когда его собственная уже написана. По завершении проверки,
программист дает ответ: программа написана правильно или написана
неправильно. Программист спит, если не пишет свою программу и не
проверяет чужую программу. Программист просыпается, когда получает
заключение от другого программиста. Если программа признана
правильной, программист пишет другую программу, если программа
признана неправильной, программист исправляет ее и отправляет на
проверку тому же программисту, который ее проверял. Количество
программистов может меняться динамически
уходить).
Создать
сетевое
приложение,
(приходить и/или
моделирующее
работу
программистов.
23.Определить ранг матрицы.
Входные данные: целые положительные
числа n и m произвольная матрица А размерности n х m. Решить задачу
двумя способами: 1) количество потоков является входным параметром,
при этом размерность матриц может быть не кратна количеству потоков:
2) количество потоков заранее неизвестно и не является параметром
задачи. Числа m и n одинаковы.
24.Найти обратную матрицу для матрицы А. Входные данные:
целые
положительные числа n и m произвольная матрица А размерности n х m.
Решить задачу двумя способами: 1) количество потоков является входным
параметром, при
этом размерность матриц может быть не кратна
количеству потоков: 2) количество потоков заранее неизвестно и не
является параметром задачи. Числа m и n одинаковы.
25.Определить множество индексов i, для которых (A[i] - B[i]) или (A[i] +
B[i]) являются простыми числами. Входные данные: массивы целых
положительных чисел А и В, произвольной длины > 1000. Количество
потоков зависит от размерностей массивов, и не является параметром
задачи.
26.Определить множество индексов i, для которых A[i] и B[i] не имеют
общих делителей (единицу в роли делителя не рассматривать). Входные
данные: массивы целых положительных
чисел А
и В, произвольной
длины > 1000.
27.Вывести список всех целых чисел, содержащих от 4 до 9 значащих цифр,
которые после умножения на n, будут содержать все те же самые цифры в
произвольной последовательности и в произвольном количестве. Входные
данные: целое положительное число n, больше единицы и меньше десяти.
28.Вычислить
числа а
используя метод трапеций. Входные данные:
и b. Функция
f(x)
определяется с помощью программной
функции. При суммировании использовать принцип дихотомии.
29.Вычислить
числа а
используя метод Симпсона. Входные данные:
и b. Функция
f(x)
определяется с помощью программной
функции. При суммировании использовать принцип дихотомии.
30.Определить, делится ли целое число
А, содержащее от 1 до 1000
значащих цифр, на 2, 3, 4, 5, 6, 7, 8, 9, 10. Входные данные:
целое
положительное число А, записанное в файле. Количество исполнителей –
количество запущенных клиентов.
31.Задача об инвентаризации по рядам. После нового года в библиотеке
СФУ обнаружилась пропажа каталога. После поиска и наказания
виноватых, ректор дал указание восстановить каталог силами студентов.
Фонд библиотека представляет собой прямоугольное помещение, в
котором находится М рядов по N шкафов по К книг в каждом шкафу.
Требуется создать многопоточное приложение, составляющее каталог.
При решении задачи использовать метод «портфель задач», причем в
качестве отдельной
задачи
задается
составление каталога
одним
студентом для одного ряда.
32.Пусть дано большое количество тел (планет, звезд и т. д.), для каждого из
которых известна масса, начальное положение и скорость. Под действием
гравитации положение тел меняется, и требуемое решение задачи состоит
в моделировании динамики изменения системы N тел на протяжении
некоторого задаваемого интервала времени. При столкновении тела
отталкиваются
суперпозиции
друг
от
друга.
Вертикальная
векторов
линия
это
линия
скоростей.
m
2
m
v=v1*m1/(
m1+m2)

1
v=v2*m2/(
m1+m2)

m
m
1
v
2
1
v
Направление
2
силы задается единичным вектором от 𝑖 к 𝑗 и противоположным вектором
от 𝑗 к 𝑖. Общая сила, действующая на тело, есть сумма сил воздействия
всех остальных тел. Приведём формулы для вычисления скорости и
положения тела: ускорение: 𝑎 = 𝐹/𝑚, изменение скорости: d𝑣𝑖 = 𝑎 d𝑡,
изменение положения тела: d𝑝𝑖 = 𝑣𝑖 +d𝑣𝑖/2d𝑡 на интервале времени d𝑡.
При реализации задачи можно использовать модель «взаимодействующие
равные», или «круговой конвейер», или алгоритм Барнса-Хата (BarnesHut), или быстрый метод мультиполей. Реализовать графическое
отображения действий после проведения расчетов.
33. Промоделировать движение шаров на бильярдном столе.
Задать
начальные положения и скорости всех шаров, считая движение
идеальным, без трения. Игра заканчивается, когда все шары окажутся в
лузах. Реализовать параллельное решение. Реализовать графическое
отображения действий после проведения расчетов.
34. Нужно расставить на шахматной доске 8 ферзей так, чтобы они не
атаковали друг друга. Найти все 92 решения (или требуемое количество).
Использовать модель «менеджер-исполнитель». Менеджер задаёт (либо
автоматически генерируют, либо через файл – реализовать оба варианта)
начальные позиции ферзей.
35.Игра́ «Жизнь-2». Волки и Зайцы. Место действия этой игры —
«вселенная» — это размеченная на клетки поверхность (квадрат, размер
которого задается сервером от 10*10 до 100*100). Дано двумерное поле
клеток, каждая из которых либо содержит волка (1), либо зайца (2), либо
пуста (0). Каждая клетка проверяет состояние своих соседей (их 8) и
изменяет своё по правилам:
1. Волки и зайцы живут по правилам задачи «Жизни» .
2. Волк съедает одного зайца-соседа, в любом порядке на ваш выбор, за
один шаг.
3. Порядок следования правил также выбирается вами: волк ли съест
быстрее зайца, или заяц умрёт сам, заяц умирает, если соседей (зайцев)
меньше двух или больше 4.
Правила игры «Жизнь»: Каждая клетка на этой поверхности может
находиться в двух состояниях: быть живой или быть мёртвой. Клетка
имеет восемь соседей. Распределение живых клеток в начале игры
называется первым поколением. Каждое следующее поколение
рассчитывается на основе предыдущего по таким правилам: пустая
(мёртвая) клетка рядом с тремя живыми клетками-соседями оживает;
если у живой клетки есть две или три живые соседки, то эта клетка
продолжает жить; в противном случае (если соседей меньше двух или
больше трёх) клетка умирает (от «одиночества» или от
«перенаселённости»). Все рождения и смерти происходят одновременно:
умирающая клетка может способствовать рождению, но не может
предотвратить смерть, уменьшая перенаселенность. Также как
рождающиеся клетки не могут убить или защитить клетки, жившие в
предыдущем поколении
Реализовать параллельное решение игры. Реализовать графическое
отображения действий после проведения расчетов.
36.Задача «пожар». Дано двумерное поле клеток (размерность задается
сервером но не менее 10*10), каждая из которых либо содержит дерево
(1), либо куст (2), либо пуста (0). Пожар начинается в одной клетке
(либо выбирается случайным образом, либо задаётся явно). Теперь
клетка может гореть (5), или быть потушенной (0). Каждая клетка
проверяет состояние своих соседей (их 4) и изменяет своё по правилам:
1. Куст или дерево загорается, если любой из соседей горит.
2. Куст горит 1 поколение, дерево 2 поколения.
3. Куст или дерево загорается, если его окружают 3 горящие клетки по
диагонали.
Показать картину пожара поля, пока пожар не закончится.
Реализовать параллельное решение игры. Реализовать графическое
отображения действий после проведения расчетов.
37.Игра «Лабиринт жизни». «Лабиринт жизни» - игра-головоломка,
придуманная Андреа Гилберт (Andrea Gilbert,
http://www.clickmazes.com/) по мотивам широко известной игры
«Жизнь» и ее правил, описывающих поведение колонии организмов.
Изменения свелись к введению в игру одной «умной» клетки, которой
разрешается перемещаться на любую свободную соседнюю ячейку при
смене поколений. В зависимости от ситуации, «умная» клетка может
также оставаться на своем месте. Во всем остальном, включая влияние
на «рождения» и «смерти» соседей, поведение «умной» клетки
описывается классическими правилами игры «жизнь».
Цель игры – поддерживая «умную» клетку живой, привести ее к
«цели», т.е. в заданную ячейку игровой решетки. В случае если «умная»
клетка погибает, не достигнув заданной ячейки, игра считается проигранной.
Постановка задачи: написать параллельное приложение, находящее
одно или несколько решений игры «лабиринт жизни». Входные данные
приложения представляют собой текстовый файл, имя которого передается
программе как аргумент командной строки. Файл с исходными данными
содержит изначальное состояние игрового поля. Результат работы
программы необходимо вывести в файл, имя которого задано вторым
аргументом командной строки. Результатом является путь «умной» клетки из
своей начальной позиции в заданную ячейку с учетом взаимодействия с
другими живыми клетками колонии из поколения в поколение.
Формат файла исходных данных: программа принимает данные из
текстового файла, заданного аргументом командной строки. В первой строке
файла содержатся два целых числа, определяющих размерность игрового
поля, число строк и столбцов соответственно. Условимся, что координаты
левой верхней ячейки (1 1). Во второй строке файла содержится пара
координат «цели». В третьей строке содержатся начальные координаты
«умной» клетки. Оставшаяся часть исходного файла содержит позиции
«живых» клеток первого поколения игры. В каждой строке следуют пять пар
целых чисел, разделенных как минимум одним пробелом. Т.о. строка
содержит координаты пяти живых клеток. Признаком окончания списка
клеток является пара нулевых координат (0 0). Таким образом, последняя
строка секции может содержать менее чем 5 пар координат.
Формат файла результата: приложение должно сгенерировать файл, содержащий
последовательные перемещения «умной» клетки по направлению к цели. Каждое
перемещение описывается целым числом от ‘0’ to ‘8’: ‘0’ означает, что клетка осталась на
своем месте; ‘1’ соответствует перемещению по диагонали в левую верхнюю ячейку, ‘2’ –
перемещению вверх, и так далее по часовой стрелке.
Строки файла результата должны содержать по 40 символов без пробелов, за
исключением последней строки, которая, возможно, будет содержать менее 40 символов.
В случае если решение найти невозможно, следует вывести соответствующее сообщение.
Пример командной строки: ./mazeoflife gridin.txt pathout.txt
Пример файла с исходными данными, gridin.txt:
7
4
4
1
6
7
6
2
4 2 3 2 5 3 4 5 4
3 6 5 7 4 0 0
Пример файла результата, pathout.txt:
Solution Path:
3845524
Реализовать графическое отображения действий после проведения
расчетов.
38. Головоломка Masyu была разработана японской компанией Nikoli,
специализирующейся на издании книг и журналов с головоломками. Игра
происходит на прямоугольном поле, в ячейках которого расположены
белые и черные круги. Цель – соединить круги вертикальными и
горизонтальными отрезками таким образом, чтобы получилась замкнутая
линия. Линия не должна пересекать саму себя, ветвиться или проходить
через одну клетку дважды. Чтобы усложнить задачу, введены два
дополнительных правила:
Линия, проходящая через ячейку с белым кругом, должна пройти ячейку
прямо, не меняя направления, и повернуть на 90 градусов в следующей
ячейке (хотя бы с одной стороны).
Пример прохождения линии через белую ячейку (оба варианта возможны и
корректны):
Линия, проходящая через ячейку с черным кругом, должна повернуть
на 90 градусов в этой же ячейке и далее пройти прямо как минимум до
середины второй ячейки.
Постановка задачи: написать параллельное приложение, которое
решает головоломки Masyu. Входные данные приложения представляют
собой текстовый файл, имя которого передается программе как аргумент
командной строки. В файле содержится размерность игрового поля и
координаты ячеек с черными и белыми кругами. В файл результата,
определяемый вторым аргументом командной строки, необходимо вывести
решение головоломки, т.е. путь замкнутой линии по игровому полю согласно
описанным выше правилам.
Формат файла исходных данных: программа принимает данные из
текстового файла, заданного аргументом командной строки. В первой строке
файла содержатся два целых числа, определяющих размерность игрового
поля, соответственно число строк и число столбцов. Условимся, что
координаты левой верхней ячейки (1 1). Далее следуют две секции,
описывающие координаты ячеек с кругами. Каждая секция начинается со
строки с единственным символом ‘B’ или ‘W’, что соответствует началу
блоков координат белых и черных кругов. Далее в каждой строке следуют
пять пар целых чисел, разделенных как минимум одним пробелом. Числа
представляют координаты пяти кругов. Признаком окончания секции
является пара нулевых координат (0 0). Таким образом, последняя строка
секции может содержать менее чем 5 пар координат. Ячейки, координаты
которых не встречаются ни в одной из двух секций, являются «пустыми», т.е.
не содержат кругов.
Формат файла результата: приложение должно сгенерировать файл,
описывающий замкнутую ломаную линию, проходящую по игровому полю
через черные и белые круги. В первой строке необходимо вывести пару
координат любой ячейки, через которую проходит путь. Это «стартовая»
ячейка. Далее, каждый отрезок пути размером в одну ячейку необходимо
вывести в виде одного символа по направлению движения, т.е. ‘U’ – вверх,
‘D’ – вниз, ‘R’ – вправо, ‘L’ – влево.
Строки файла результата должны содержать по 40 символов без
пробелов, за исключением последней строки, которая, возможно, будет
содержать менее 40 символов.
Если решение головоломки найдено, последний шаг должен привести в
ячейку, заданную в первой строке файла результата. В случае если решение
найти невозможно, следует вывести соответствующее сообщение.
Пример командной строки: ./masyu gridin.txt pathout.txt
Пример файла с исходными данными, gridin.txt:
77
B
6113561500
W
3142437444
75265700
Пример файла результата, pathout.txt:
17
DDDDDLDLLLULLUUUURDDDRUUUURRDDLDDRRUUUU
R
Наглядный пример исходных данных
Реализовать графическое отображения действий после проведения
расчетов.
Download