1

Тема: Вивід результату - послідовність ходів.

Доброго дня!

Виникла потреба в реалізації даного завдання:
Задані координати двох клітинок шахової дошки (наприклад, А5 і С2). Знайти мінімальну кількість ходів, які потрібні шаховому коню, що перейти з першої клітинки на другу.

Результат виконання повинен мати наступний формат:
1. Мінімальна кількість ходів
2. Послідовність ходів

Маючи в арсеналі лише мінімальні теоретичні знання С# вирішив знайти на просторах інтернету реалізації подібних завдань, які конвертував в С#. В результаті отримав:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MissionImposible
{
    class Point
    {
        public int x;
        public int y;

        public Point()
        {
            Console.WriteLine("Write x");
            x = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Write y");
            y = Convert.ToInt32(Console.ReadLine());
       }

        public Point(int X, int Y)
        {
            x = X;
            y = Y;
        }
    }

    class Program
    {
        static bool correct(int x, int y, int n)
        {
            if (x < 0 || y < 0)
                return false;
            if (x >= n || y >= n)
                return false;
            return true;
        }

        static void Solve()
        {
            int[] moveX = { -2, -2, -1, -1, 1, 1, 2, 2 }; 
            int[] moveY = { -1, 1, -2, 2, -2, 2, -1, 1 };
            
            Console.WriteLine("Write N...");
            var inputString = Console.ReadLine();
            int n = Convert.ToInt32(inputString);
            Point begin = new Point();
            Point end = new Point();
            int[,] mas = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    mas[i, j] = -1;
                }
            }

            mas[begin.x, begin.y] = 0;
            var q = new System.Collections.Generic.Queue<Point>();
            q.Enqueue(begin);
            while (q.Count != 0)
            {
                Point cur = q.Dequeue();
                for (int i = 0; i < 8; i++)
                {
                    int x = cur.x + moveX[i];
                    int y = cur.y + moveY[i];
                    if (correct(x, y, n) && mas[x, y] == -1)
                    {
                        mas[x, y] = mas[cur.x, cur.y] + 1;
                        if (end.x == x && end.y == y)
                        {
                            Console.WriteLine(mas[end.x, end.y]);
                            Console.ReadLine();
                            return;
                        }
                        q.Enqueue(new Point(x, y));
                    }
                    
                }
            }
        }

        static void Main(string[] args)
        {
            Solve();
        }
    }
}



Програма працює і виводить вірний результат, але потрібно ще реалізувати вивід послідовності ходів, що у мене не виходить. Буду вдячний за Ваші ідеї!