Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace _05.Sorting
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- public class Sorting
- {
- private static HashSet<string> used = new HashSet<string>();
- private static int result = -1;
- public static void Main(string[] args)
- {
- Console.ReadLine();
- char[] numbers = Console.ReadLine().Split().Select(char.Parse).ToArray();
- int lengthToReverse = int.Parse(Console.ReadLine());
- Queue<char[]> queue = new Queue<char[]>();
- queue.Enqueue(numbers);
- Queue<int> depths = new Queue<int>();
- depths.Enqueue(0);
- BFS(lengthToReverse, queue, depths);
- Console.WriteLine(result);
- }
- private static void BFS(int lengthToReverse, Queue<char[]> queue, Queue<int> depths)
- {
- while (queue.Count > 0)
- {
- var current = queue.Dequeue();
- var currentDepth = depths.Dequeue();
- if (result != -1)
- {
- return;
- }
- if (IsSorted(current))
- {
- result = currentDepth;
- return;
- }
- used.Add(new string(current));
- for (int i = 0; i <= current.Length - lengthToReverse; i++)
- {
- var reversed = current.Clone() as char[];
- Array.Reverse(reversed, i, lengthToReverse);
- if (IsSorted(reversed))
- {
- result = currentDepth + 1;
- return;
- }
- if (!used.Contains(new string(reversed)))
- {
- queue.Enqueue(reversed);
- depths.Enqueue(currentDepth + 1);
- }
- }
- }
- }
- private static bool IsSorted(char[] numbers)
- {
- for (int i = 0; i < numbers.Length - 1; i++)
- {
- if (numbers[i] > numbers[i + 1])
- {
- return false;
- }
- }
- return true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement