static void Main(string[] args) { int[] nums = ParseToInt(Console.ReadLine().Split()); int n = nums[0]; int m = nums[1]; Queue <SequenceNtoM> items = new Queue <SequenceNtoM>(); items.Enqueue(new SequenceNtoM(n, null)); while (items.Count > 0) { SequenceNtoM currentItem = items.Dequeue(); if (currentItem.Value < m) { items.Enqueue(new SequenceNtoM(currentItem.Value + 1, currentItem)); items.Enqueue(new SequenceNtoM(currentItem.Value + 2, currentItem)); items.Enqueue(new SequenceNtoM(currentItem.Value * 2, currentItem)); } if (currentItem.Value == m) { PrintSolution(currentItem); break; } } }
private static void PrintSolution(SequenceNtoM item) { Stack <int> output = new Stack <int>(); while (item != null) { output.Push(item.Value); item = item.PreviousItem; } Console.WriteLine(string.Join(" -> ", output)); }
public SequenceNtoM(int value, SequenceNtoM previousItem) { this.Value = value; this.PreviousItem = previousItem; }