Advertisement
Filkolev

Sorting

Nov 27th, 2015
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.29 KB | None | 0 0
  1. namespace _05.Sorting
  2. {
  3.     using System;
  4.     using System.Collections.Generic;
  5.     using System.Linq;
  6.  
  7.     public class Sorting
  8.     {
  9.         private static HashSet<string> used = new HashSet<string>();
  10.         private static int result = -1;
  11.  
  12.         public static void Main(string[] args)
  13.         {
  14.             Console.ReadLine();
  15.  
  16.             char[] numbers = Console.ReadLine().Split().Select(char.Parse).ToArray();
  17.             int lengthToReverse = int.Parse(Console.ReadLine());
  18.  
  19.             Queue<char[]> queue = new Queue<char[]>();
  20.             queue.Enqueue(numbers);
  21.             Queue<int> depths = new Queue<int>();
  22.             depths.Enqueue(0);
  23.  
  24.             BFS(lengthToReverse, queue, depths);
  25.  
  26.             Console.WriteLine(result);
  27.         }
  28.  
  29.         private static void BFS(int lengthToReverse, Queue<char[]> queue, Queue<int> depths)
  30.         {
  31.             while (queue.Count > 0)
  32.             {
  33.                 var current = queue.Dequeue();
  34.                 var currentDepth = depths.Dequeue();
  35.  
  36.                 if (result != -1)
  37.                 {
  38.                     return;
  39.                 }
  40.  
  41.                 if (IsSorted(current))
  42.                 {
  43.                     result = currentDepth;
  44.                     return;
  45.                 }
  46.  
  47.                 used.Add(new string(current));
  48.  
  49.                 for (int i = 0; i <= current.Length - lengthToReverse; i++)
  50.                 {
  51.                     var reversed = current.Clone() as char[];
  52.                     Array.Reverse(reversed, i, lengthToReverse);
  53.  
  54.                     if (IsSorted(reversed))
  55.                     {
  56.                         result = currentDepth + 1;
  57.                         return;
  58.                     }
  59.  
  60.                     if (!used.Contains(new string(reversed)))
  61.                     {
  62.                         queue.Enqueue(reversed);
  63.                         depths.Enqueue(currentDepth + 1);
  64.                     }
  65.                 }
  66.             }
  67.         }
  68.  
  69.         private static bool IsSorted(char[] numbers)
  70.         {
  71.             for (int i = 0; i < numbers.Length - 1; i++)
  72.             {
  73.                 if (numbers[i] > numbers[i + 1])
  74.                 {
  75.                     return false;
  76.                 }
  77.             }
  78.  
  79.             return true;
  80.         }
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement