.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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы