Определить все возможные расположения вагонов и локомотива на прямом отрезке железнодорожного пути - C#

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

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

Доброго времени суток. У меня такая задача: Локомотив А и вагоны стоят на железнодорожном пути, приведенном ниже, в порядка (слева направо). Локомотив можно произвольно отцеплять и прицеплять с отдельными вагонами, стрелки могут приобретать произвольного положения и локомотив может тянуть или толкать вагон, к которому он прицеплен. Необходимо определить все возможные расположения вагонов и локомотива на прямом отрезке железнодорожного пути. Допускаем у меня есть локомотив А и вагоны B,C,D. Комбинация должна выглядеть так: AB, AC, AD, BAC, BAD, CAB, CAD, DAC, DAB, на сколько я понял. Вот код который я написал. Как сделать так, что бы оно создавало комбинации? Если можно то пожалуйста с объяснением.
Листинг программы
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Console.WriteLine("Задача про локомотив");
  6. Console.WriteLine("Введите количество вагонов");
  7. int quantity = Convert.ToInt32(Console.ReadLine());
  8.  
  9. Console.WriteLine("За локомотив принимаем А");
  10.  
  11. string[] alphabet = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
  12. string[] cars = new string[quantity]; //количество вагонов соответствует количеству элементов в массиве
  13. string[] depot;//депо
  14. for (int i = 0; i < cars.Length; i++)
  15. {
  16. cars[i] = alphabet[i];
  17. }
  18.  
  19. Console.ReadLine();
  20. }

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

textual
Листинг программы
  1.      //init
  2.             Dictionary<int, char> mask = new Dictionary<int, char> {
  3.                 {0,'0'},
  4.                 {1,'A'},
  5.                 {2,'B'},
  6.                 {3,'C'},
  7.                 {4,'D'},
  8.             };
  9.  
  10.             //data
  11.             int[] values = new int[mask.Count - 1];
  12.             List<string> allValues = new List<string>((int)Math.Pow(mask.Count, mask.Count - 1));
  13.             for (int i = 0, degree = 0; i < Math.Pow(mask.Count, mask.Count - 1); i++)
  14.             {
  15.                 string rval = String.Empty;
  16.                 foreach (var t in values) rval += mask[t];
  17.                 allValues.Add(rval);
  18.                 values[degree]++;
  19.  
  20.                 for (int j = 0; j < values.Length; j++)
  21.                     if (values[j] == mask.Count)
  22.                     {
  23.                         values[j] = 0;
  24.                         if (j + 1 < values.Length) values[j + 1]++;
  25.                     }
  26.             }
  27.  
  28.             //result
  29.             var result = from _ in (from _ in allValues
  30.                                     where _.Contains('A')
  31.                                     let res = _.Replace("0", String.Empty)
  32.                                     where res.Distinct().Count() == res.Count()
  33.                                     select res).Distinct()
  34.                          orderby _
  35.                          select _;
  36.             foreach (var r in result) Console.WriteLine(r);

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


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

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

9   голосов , оценка 4 из 5

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

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

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