namespace _8_ferzy
{
class Program
{
static void Vivod(int[] mas1, int[] mas2)
{
for (int i=1;i<9; i++)
{ Console.WriteLine(mas1[i]+" "+mas2[i]); }
}
static bool Proverka(int[] mas1,int[] mas2, int ii)
{
bool g = true;
for (int p=1;p<=ii-1;p++)
{
if (mas1[p] == mas1[ii] || mas2[p] == mas2[ii] || Math.Abs(mas1[p] - mas1[ii]) == Math.Abs(mas2[p] - mas2[ii]))
{ g = false; break; }
}
return g;
}
static void Main(string[] args)
{
Console.WriteLine("Задайте размеры доски:");
Console.Write("количество вертикалей А=");
int A = Convert.ToInt16(Console.ReadLine());
Console.Write("количество горизонталей B=");
int B = Convert.ToInt16(Console.ReadLine());
Console.Write("количество ферзей N=");
int N = Convert.ToInt16(Console.ReadLine());
int M = A * B; // количество клеток доски (количество номеров вариантов)
int k =0; // количество вариантов
int[] x = new int[N+1]; // для фиксации положений (координат) ферзей 2 массива
int[] y = new int[N+1];
int i = 0; // номер ферзя которому ищется место
link11: i = i + 1;
int j = 0;
if (i > N) { k++; Console.WriteLine("Вывод решения"); Vivod(x,y);Console.ReadKey(); }
link14: j = j + 1;
if (i == 1)
{
x[i] = 1; y[i] = 1;
}
else
{
x[i] = x[i - 1]; y[i] = y[i-1];
}
// link1:
if (j > M) { Console.WriteLine("Ход назад"); goto link27; }
if (y[i]<B)
{
y[i] = y[i] + 1;
}
else
{
y[i] = 1; x[i] = x[i] + 1;
}
if (Proverka(x,y,i) == false) goto link14;
goto link11;
link27: i = i - 1;
if (i == 0) { System.Environment.Exit(0); }
Console.ReadKey();
}
}
}
не выводится решение задачи
Здравствуйте! Подскажите, пожалуйста, в чем ошибка алгоритма полного перебора с возвратом задачи о 8 ферзях?