/// <summary> /// Skok nadol do�ava /// </summary> /// <param name="stav">Stav na ktorom sa bude vykon�va� oper�tor</param> /// <returns>Poz�ciu kam sko�� k�� ak je to mo�n�, inak null</returns> /// <exception cref="IndexOutOfRangeException" /> private static Tuple <int, int> O6(Stav stav) { var result = new Tuple <int, int>(stav.X - 1, stav.Y + 2); return(result.Item1 < 0 || result.Item2 >= stav.Height || stav.Used[result.Item1, result.Item2] ? null : result); }
/// <summary> /// Vytvorí nový stav na základe predchadzajúceho stavu /// </summary> /// <param name="stav">Stav, z ktorého ma skopírovať rozloženie</param> /// <param name="horse">Nová pozícia koňa</param> /// <exception cref="IndexOutOfRangeException" /> public Stav(Stav stav, Tuple <int, int> horse) { Width = stav.Width; Height = stav.Height; Used = new bool[Width, Height]; for (var x = 0; x < Width; x++) { for (var y = 0; y < Height; y++) { Used[x, y] = stav.Used[x, y]; } } X = horse.Item1; Y = horse.Item2; Used[horse.Item1, horse.Item2] = true; From = stav; }
/// <summary> /// Vytvor nový stav /// </summary> /// <param name="width">Šírka stavu</param> /// <param name="height">Výška stavu</param> /// <param name="x">Horizontálna pozícia koňa</param> /// <param name="y">Vertikálna pozícia koňa</param> /// <exception cref="IndexOutOfRangeException" /> /// <exception cref="ArgumentException" /> public Stav(int width, int height, int x, int y) { if (width > Search.MaxWidth || width < Search.MinWidth) { throw new ArgumentException("Wrong Width", nameof(width)); } if (height > Search.MaxHeight || height < Search.MinHeight) { throw new ArgumentException("Wrong Height", nameof(height)); } Used = new bool[width, height]; Width = width; Height = height; X = x; Y = y; Used[X, Y] = true; From = null; }
/// <summary> /// Vytvor� nov� uzol na z�klade druh�ho uzla /// </summary> /// <param name="uzol">Uzol, z ktor�ho ma skop�rova� rozlo�enie</param> /// <param name="horse">Nov� poz�cia ko�a</param> /// <exception cref="IndexOutOfRangeException" /> public Uzol(Uzol uzol, Tuple <int, int> horse) { Stav = new Stav(uzol.Stav, horse); _remaining = uzol._remaining - 1; GenerateJumps(); }
/// <summary> /// Vytvor nov� uzol /// </summary> /// <param name="width">��rka stavu</param> /// <param name="height">V��ka stavu</param> /// <param name="x">Horizont�lna poz�cia ko�a</param> /// <param name="y">Vertik�lna poz�cia ko�a</param> /// <exception cref="IndexOutOfRangeException" /> /// <exception cref="ArgumentException" /> public Uzol(int width, int height, int x, int y) { Stav = new Stav(width, height, x, y); _remaining = Stav.Width * Stav.Height - 1; GenerateJumps(); }
/// <summary> /// Skok v�avo hore /// </summary> /// <param name="stav">Stav na ktorom sa bude vykon�va� oper�tor</param> /// <returns>Poz�ciu kam sko�� k�� ak je to mo�n�, inak null</returns> /// <exception cref="IndexOutOfRangeException" /> private static Tuple <int, int> O8(Stav stav) { var result = new Tuple <int, int>(stav.X - 2, stav.Y - 1); return(result.Item1 < 0 || result.Item2 < 0 || stav.Used[result.Item1, result.Item2] ? null : result); }