.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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д