Задача ёжик - Собрать все фишки, расставленные на поле - PascalABC.NET
Формулировка задачи:
Смысл компьютерной игры “Ежик” заключается в том, чтобы собрать все фишки,
расставленные на поле размером N x M, количество фишек – K. Фишки в игре
пронумерованы, собирать их можно только в порядке возрастания их номеров.
В начале игры Ежик начинает движение с клетки c координатами (1, 1). За каждый
шаг игры Ежик может переместиться только на одну из 8-ми соседних клеток (вверх,
вниз, вправо, влево или по диагонали), конечно с соблюдением условия, что выходить за
пределы игрового поля нельзя. Если ежик попадает на клетку с фишкой с большим
номером, чем он сейчас должен взять, то ничего не происходит (фишка остается стоять в
клетке).
Требуется определить, какое минимальное число шагов необходимо ежику, чтобы
собрать все фишки, расставленные на поле.
Входные данные
В первой строке входного файла записаны через пробел три целых числа N, M, K
(1 ≤ N ≤ 1000, 1 ≤ M ≤ 1000, 1 ≤ K ≤ 1000). Далее в K строках записаны через пробел по
два целых числа (Xi, Yi) – координаты расположения фишек на игровом поле в порядке
возрастания их номеров.
Выходные данные
В выходной файл записать одно целое число – минимальное число шагов, за
которое ежик может собрать все фишки
Input.txt
4 4 3
4 3
1 4
3 2
Output.txt
8
Решение задачи: «Задача ёжик - Собрать все фишки, расставленные на поле»
textual
Листинг программы
var n,m,k:integer; i:integer; st1,str1,st2,str2:integer; s:longint; function hod(x1,y1,x2,y2:integer):integer; function min_0(a,b:integer):integer; begin if a=b then min_0:=a else if a<b then min_0:=a else min_0:=b end; begin hod:=abs(abs(x1-x2)-abs(y1-y2))+min_0(abs(x1-x2),abs(y1-y2)) end; begin assign(input,'input.txt');reset(input); assign(output,'output.txt');rewrite(output); s:=0; readln(n,m,k); str1:=1;st1:=1; for i:=1 to k do begin st2:=st1;str2:=str1; readln(str1,st1); s:=s+hod(str1,st1,str2,st2) end; write(s); close(output) end.
Объяснение кода листинга программы
- Объявлены переменные: n, m, k (считываются из файла input.txt)
- Объявлены переменные: i, st1, str1, st2, str2 (для обработки цикла)
- Задана функция hod(x1,y1,x2,y2:integer):integer;
- Внутри функции hod() определена вспомогательная функция min_0(a,b:integer):integer;
- Функция hod() вычисляет расстояние между двумя точками (x1,y1) и (x2,y2) на плоскости и затем добавляет минимальное значение из двух других расстояний (это нужно для дальнейшего подсчета всех расстояний)
- Цикл выполняется k раз (значение k считывается из файла input.txt)
- Внутри цикла перебираются все точки на плоскости (их координаты считываются из файла input.txt)
- Каждое расстояние от текущей точки до всех остальных точек суммируется в переменную s
- После выполнения цикла, значение переменной s записывается в файл output.txt
- Файл output.txt закрывается
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д