Написать программу, выводящую путь коня(клетка за клеткой) с помощью рекурсии - C#
Формулировка задачи:
задача классическая: требуется написать программу получающую на вход начальное положение коня на шахматной доске, конь,собственно, должен обойти всю доску(8 на 8), не пропустив ни одной клетки, а выводить она должна путь коня(клетка за клеткой).
программу надо реализовать обязательно с помощью рекурсии.
вот набросок, сильно не ругайтесь за мой подход(возможно неправильный)
ошибку выдает в первом цикле процедуры(вышел за границы массива), не пойму почему.
Подскажите, что еще неправильно пожалуйста
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace рекурсия { class Program { static void Main(string[] args) { int[] X = new int[64], Y = new int[64]; Console.WriteLine("Введите начальное положение коня"); X[0] = Convert.ToInt32(Console.ReadLine()); Y[0] = Convert.ToInt32(Console.ReadLine()); int i = 0; int j = 1; Move(X,Y,i,j); for (i = 0; i<64; i++) { Console.WriteLine(X[i] + ' ' + Y[i]); } Console.ReadLine(); } public static bool k = false; public static int f = 0; public static int b = 0; static void Move(int[] X, int[] Y, int i, int j) { if (j < 64) { switch (i) { case 0: X[j] = (X[j - 1] + 1); Y[j] = (Y[j - 1] - 2); break; case 1: X[j] = (X[j - 1] + 2); Y[j] = (Y[j - 1] + 1); break; case 2: X[j] = (X[j - 1] - 1); Y[j] = (Y[j - 1] + 2); break; case 3: X[j] = (X[j - 1] - 2); Y[j] = (Y[j - 1] - 1); break; case 4: X[j] = (X[j - 1] - 1); Y[j] = (Y[j - 1] - 2); break; case 5: X[j] = (X[j - 1] + 2); Y[j] = (Y[j - 1] - 1); break; case 6: X[j] = (X[j - 1] + 1); Y[j] = (Y[j - 1] + 2); break; case 7: X[j] = (X[j - 1] - 2); Y[j] = (Y[j - 1] + 1); break; } for (int l = 0; l < 64 && l != j; j++) { if ((X[j] == X[l])&&(Y[j]==Y[l])) { k = true; } } if (X[j] < 8 && X[j] > -1 && Y[j] < 8 && Y[j] > -1 && !k) { i = 0; j++; Move(X, Y, i, j); } else { X[j] = 0; Y[j] = 0; j--; i++; if (i < 8) { Move(X, Y, i, j); } else { f = X[j] - X[j - 1]; b = Y[j] - Y[j - 1]; if ((f == 1) && (b == 2)) { i = 7; j--; } if ((f == 1) && (b == -2)) { i = 1; j--; } if ((f == -1) && (b == 2)) { i = 3; j--; } if ((f == -1) && (b == -2)) { i = 5; j--; } if ((f == 2) && (b == 1)) { i = 2; j--; } if ((f == 2) && (b == -1)) { i = 6; j--; } if ((f == -2) && (b == 1)) { i = 8; j--; } if ((f == -2) && (b == -1)) { i = 4; j--; } } k = false; } } } } }
Решение задачи: «Написать программу, выводящую путь коня(клетка за клеткой) с помощью рекурсии»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace рекурсия { class Program { static void Main(string[] args) { int[] X = new int[64], Y = new int[64]; Console.WriteLine("Введите начальное положение коня"); X[0] = 1/*Convert.ToInt32(Console.ReadLine())*/; Y[0] = 1/*Convert.ToInt32(Console.ReadLine())*/; int i = 0; int j = 1; Move(X,Y,i,j); for (i = 0; i<64; i++) { Console.WriteLine(X[i] + " " + Y[i]); } Console.ReadLine(); } public static bool k = false; public static int f = 0; public static int b = 0; static void Move(int[] X, int[] Y, int i, int j) { if (j < 64) { switch (i) { case 0: X[j] = (X[j - 1] + 1); Y[j] = (Y[j - 1] - 2); break; case 1: X[j] = (X[j - 1] + 2); Y[j] = (Y[j - 1] + 1); break; case 2: X[j] = (X[j - 1] - 1); Y[j] = (Y[j - 1] + 2); break; case 3: X[j] = (X[j - 1] - 2); Y[j] = (Y[j - 1] - 1); break; case 4: X[j] = (X[j - 1] - 1); Y[j] = (Y[j - 1] - 2); break; case 5: X[j] = (X[j - 1] + 2); Y[j] = (Y[j - 1] - 1); break; case 6: X[j] = (X[j - 1] + 1); Y[j] = (Y[j - 1] + 2); break; case 7: X[j] = (X[j - 1] - 2); Y[j] = (Y[j - 1] + 1); break; } for (int l = 0; l < 64 && l != j; l++) { if ((X[j] == X[l])&&(Y[j]==Y[l])) { k = true; } } if (X[j] < 9 && X[j] > 0 && Y[j] < 9 && Y[j] > 0 && !k) { i = 0; j++; Move(X, Y, i, j); } else { if (!k) { X[j] = 0; Y[j] = 0; i++; if (i < 8) { Move(X, Y, i, j); } else { f = X[j] - X[j - 1]; b = Y[j] - Y[j - 1]; if ((f == 1) && (b == 2)) { i = 7; j--; } if ((f == 1) && (b == -2)) { i = 1; j--; } if ((f == -1) && (b == 2)) { i = 3; j--; } if ((f == -1) && (b == -2)) { i = 5; j--; } if ((f == 2) && (b == 1)) { i = 2; j--; } if ((f == 2) && (b == -1)) { i = 6; j--; } if ((f == -2) && (b == 1)) { i = 8; j--; } if ((f == -2) && (b == -1)) { i = 4; j--; } } } else { i++; if (i < 8) { Move(X, Y, i, j); } else { f = X[j] - X[j - 1]; b = Y[j] - Y[j - 1]; if ((f == 1) && (b == 2)) { i = 7; j--; } if ((f == 1) && (b == -2)) { i = 1; j--; } if ((f == -1) && (b == 2)) { i = 3; j--; } if ((f == -1) && (b == -2)) { i = 5; j--; } if ((f == 2) && (b == 1)) { i = 2; j--; } if ((f == 2) && (b == -1)) { i = 6; j--; } if ((f == -2) && (b == 1)) { i = 8; j--; } if ((f == -2) && (b == -1)) { i = 4; j--; } } k = false; } } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д