Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
        /// <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;
        }
Пример #4
0
 /// <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();
 }
Пример #5
0
 /// <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();
 }
Пример #6
0
        /// <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);
        }