Программа которая возвращает минимальное количество прыжков - C#

Узнай цену своей работы

Формулировка задачи:

Круг разбитый на 160 сегментов Всего 16 секторов и 10 колец. В дальнейшем каждый сегмент задается номером кольца (от 1 до 10 считая от центра) и номером сектора (от 1 до 16 по ходу часовой стрелки) Например (1, 16) это сегмент, который расположен на первом кольце от центра и в 16 секторе. На круге находится лягушка возвращена по ходу часовой стрелки. Лягушка может прыгнуть в 5 точек относительно своего первоначального положения: ● на том же кольце на 3 сектора вперед ● на 1 кольцо ближе к центру и на 2 сектора вперед ● на 1 кольцо дальше от центра и на 2 сектора вперед ● на 2 кольца ближе к центру и на 1 сектор вперед ● на 2 кольца дальше от центра и на 1 сектор вперед Лягушка не может выпрыгнуть за круг, не может развернуться, и не может прыгать через центр. Лягушка не может прыгать на сегменты, которые заняты деревьями (на рисунке (9, 14) и (8, 5)) Задание: Напишите программу, которая возвращает минимальное количество прыжков, что необходимо сделать лягушке для того, чтобы добраться из начального сегмента в конечном. Входные параметры: начальный и конечный сегменты, количество деревьев, координаты сегментов занятых деревьями. В выводе программы необходимо отметить минимальное количество и минимальный путь, или сообщение о невозможностью добраться из исходного положения в конечное.

Решение задачи: «Программа которая возвращает минимальное количество прыжков»

textual
Листинг программы
  1. static class Program
  2. {
  3.     /// <summary>
  4.     /// Прыжок
  5.     /// </summary>
  6.     /// <param name="сircle"></param>
  7.     /// <param name="x">Номер сектора откуда прыгаем</param>
  8.     /// <param name="y">Номер кольца откуда прыгаем</param>
  9.     /// <param name="dx">На сколько секторов прыгаем</param>
  10.     /// <param name="dy">На сколько колец прыгаем</param>
  11.     static void rec(int[,] circle, int x, int y, int dx=0, int dy=0)
  12.     {
  13.         // Сколько уже прыжков совершили
  14.         int n = circle[x, y];
  15.  
  16.         // Новые координаты:
  17.         x = (x + dx) % 16; y += dy;
  18.  
  19.         // завершаем рекурсию:
  20.         if (y < 0 || y >= 10    // Если прыгнули за круг или центр
  21.             || circle[x, y] == -1  // Если в новых координатах стоит дерево
  22.             || circle[x, y] > 0 && circle[x, y] < n) // Если уже был найден более коротнкий путь
  23.             return;
  24.  
  25.         // Говорим, что в новые координаты можно добрать за n+1 прыжков
  26.         circle[x, y] = n + 1;
  27.  
  28.         // Запускаем рекурсию по всем возможным направлениям:
  29.         rec(circle, x, y, 3, 0);
  30.         rec(circle, x, y, 1, -2);
  31.         rec(circle, x, y, 1, 2);
  32.         rec(circle, x, y, 2, 1);
  33.         rec(circle, x, y, 2, -1);
  34.            
  35.     }
  36.  
  37.     static void Main()
  38.     {
  39.         // Круг (заполнен нулями)
  40.         int[,] circle = new int[16, 10];
  41.  
  42.         // Устанавливаем деревья:
  43.         circle[5-1, 8-1] = -1;
  44.         circle[14-1, 9-1] = -1;
  45.  
  46.         // Начнем с точки 11,7
  47.         rec(circle, 11 - 1, 7 - 1);
  48.  
  49.         // Теперь для каждого сегмента круга мы
  50.         // знаем сколько прыжков нужно, чтобы туда добраться
  51.         // Например,
  52.         Console.WriteLine("в сегмент (3,3) мы доберемся за:" + (circle[3 - 1, 3 - 1] - 1) + " прыжков");
  53.  
  54.         // В общем случае:
  55.         Console.Write("     ");
  56.         for (int x = 0; x < 16; x++)
  57.             Console.Write("[{0,2}] ", x+1);
  58.         Console.WriteLine();
  59.         for (int y = 0; y < 10; y++)
  60.         {
  61.             Console.Write("[{0,2}] ", y+1);
  62.             for (int x = 0; x < 16; x++)
  63.                 Console.Write("{0,4} ", circle[x, y] - 1);
  64.  
  65.             Console.WriteLine();
  66.         }
  67.         Console.ReadLine();
  68.                
  69.     }
  70. }

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


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

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

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы