Реализовать рекурсивный алгоритм обхода шахматной доски конём - C#
Формулировка задачи:
Помогите пожалуйста с такой задачей:
Дана свободная от фигур шахматная доска размером 6*6 клеток.Требуется реализовать рекурсивный алгоритм обхода шахматной доски конём. На каждой клетке конь может побывать только один раз. Вывести координаты каждой пройденной клетки.
Вначале я пыталась найти какие-нибудь закономерности, но потом задачу можно решить только через перебор с возвратом. Как это сделать я не знаю.
Решение задачи: «Реализовать рекурсивный алгоритм обхода шахматной доски конём»
textual
Листинг программы
using System;
namespace Chess
{
class Program
{
static int[,] Ar = new int[6, 6];
static int X, Y, n;
static void Main(string[] args)
{
int[,] Ar = new int[6, 6];
Console.Write("Введите X (1-6): ");
X = Int32.Parse(Console.ReadLine()) - 1;
Console.Write("Введите Y (1-6): ");
Y = Int32.Parse(Console.ReadLine()) - 1;
Move(X, Y);
Console.ReadLine();
}
static void Move(int X, int Y)
{
int iX = 0, iY = 0, nn = ++n;
bool WasStep = false;
Ar[X, Y] = 1;
for (int i = 0; i < 8; i++)
{
switch (i)
{
case 0: iX = X + 1; iY = Y - 2; break;
case 1: iX = X + 2; iY = Y + 1; break;
case 2: iX = X - 1; iY = Y + 2; break;
case 3: iX = X - 2; iY = Y - 1; break;
case 4: iX = X - 1; iY = Y - 2; break;
case 5: iX = X + 2; iY = Y - 1; break;
case 6: iX = X + 1; iY = Y + 2; break;
case 7: iX = X - 2; iY = Y + 1; break;
}
if (iX > -1 && iX < 6 && iY > -1 && iY < 6 && Ar[iX, iY] == 0)
{
WasStep = true;
Console.WriteLine("{0,4}: {1}-{2} -> {3}-{4}", "(" + nn + ")", X + 1, Y + 1, iX + 1, iY + 1);
Move(iX, iY);
}
}
if (!WasStep) n--;
}
}
}