.NET 4.x Комбинаторика: расставить 8 ферзей на шахматной доске - C#
Формулировка задачи:
Помогите оптимизировать проверку на битьё.
static Int64 kol_vo = 0;
static int[] a;
static bool Checked(int[] masiania)
{
for (int i = 0; i < masiania.Length-1; i++)
{
if(Math.Abs(masiania[i] - masiania[i + 1]) == 1)
return false;
}
for (int i = 0; i < masiania.Length - 2; i++)
{
if (Math.Abs(masiania[i] - masiania[i + 2]) == 2)
return false;
}
for (int i = 0; i < masiania.Length - 3; i++)
{
if (Math.Abs(masiania[i] - masiania[i + 3]) == 3)
return false;
}
for (int i = 0; i < masiania.Length - 4; i++)
{
if (Math.Abs(masiania[i] - masiania[i + 4]) == 4)
return false;
}
for (int i = 0; i < masiania.Length - 5; i++)
{
if (Math.Abs(masiania[i] - masiania[i + 5]) == 5)
return false;
}
for (int i = 0; i < masiania.Length - 6; i++)
{
if (Math.Abs(masiania[i] - masiania[i + 6]) == 6)
return false;
}
for (int i = 0; i < masiania.Length - 7; i++)
{
if (Math.Abs(masiania[i] - masiania[i + 7]) == 7)
return false;
}
return true;
}
static void pperest(int k)
{
if (k < 0)
{
if(Checked(a))
{
foreach (int i in a)
Console.Write(i);
Console.WriteLine();
kol_vo++;
}
}
else
{
for (int i = 0; i <= k; i++)
{
int z = a[i];
a[i] = a[k];
a[k] = z;
pperest(k - 1);
z = a[i];
a[i] = a[k];
a[k] = z;
}
}
}
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
a=new int[n];
for (int i = 0; i < n; i++)
a[i] = i + 1;
pperest(n-1);
Console.WriteLine(kol_vo);
Console.ReadKey();
}Решение задачи: «.NET 4.x Комбинаторика: расставить 8 ферзей на шахматной доске»
textual
Листинг программы
for (int i = 0; i <= k; i++)
{
int z = a[i];
a[i] = a[k];
a[k] = z;
pperest(k - 1);
z = a[i];
a[i] = a[k];
a[k] = z;
}