Задача ёжик - Собрать все фишки, расставленные на поле - 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.

Объяснение кода листинга программы

  1. Объявлены переменные: n, m, k (считываются из файла input.txt)
  2. Объявлены переменные: i, st1, str1, st2, str2 (для обработки цикла)
  3. Задана функция hod(x1,y1,x2,y2:integer):integer;
  4. Внутри функции hod() определена вспомогательная функция min_0(a,b:integer):integer;
  5. Функция hod() вычисляет расстояние между двумя точками (x1,y1) и (x2,y2) на плоскости и затем добавляет минимальное значение из двух других расстояний (это нужно для дальнейшего подсчета всех расстояний)
  6. Цикл выполняется k раз (значение k считывается из файла input.txt)
  7. Внутри цикла перебираются все точки на плоскости (их координаты считываются из файла input.txt)
  8. Каждое расстояние от текущей точки до всех остальных точек суммируется в переменную s
  9. После выполнения цикла, значение переменной s записывается в файл output.txt
  10. Файл output.txt закрывается

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы