Advertisement
LEGEND2004

N queens

Nov 23rd, 2022 (edited)
828
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.90 KB | None | 0 0
  1. using System;
  2.  
  3. class Program{
  4.     public static void Main(){
  5.         int n = int.Parse(Console.ReadLine());
  6.         if((n == 2) || (n == 3)){
  7.             Console.WriteLine("Impossible");
  8.             Console.ReadKey();
  9.             return ;
  10.         }
  11.         char[ , ] a = new char [n , n];
  12.         for(int i = 0; i < n; i++){
  13.             for(int j = 0; j < n; j++){
  14.                 a[i , j] = '.';
  15.             }
  16.         }
  17.         bool ok = false;
  18.         int y = 0;
  19.         bool[] used = new bool[40* n + 2];
  20.         int[] left = new int[40 * n];
  21.         int[] right = new int[40 * n];
  22.         for(int i = 0; i < n; i++){
  23.             solve(i , y , n , ref ok , ref left , ref right , ref used, ref a);
  24.             if(ok)
  25.                 break;
  26.         }
  27.         for(int i = 0; i < n; i++){
  28.             for(int j = 0; j < n; j++){
  29.                 Console.Write(a[i , j]);
  30.             }
  31.             Console.Write('\n');
  32.         }
  33.         Console.ReadKey();
  34.     }
  35.     public static void solve(int x , int y , int n, ref bool ok , ref int[] left , ref int[] right , ref bool[] used , ref char[,] a){
  36.         if(ok == true){
  37.             return ;
  38.         }
  39.         if(y == (n - 1)){
  40.             a[x , y] = 'Q';
  41.             ok = true;
  42.             return ;
  43.         }
  44.         a[x , y] = 'Q';
  45.         used[x] = true;
  46.         left[3 * n - x  - y]++;
  47.         right[3 * n + x - y]++;
  48.         for(int i = 0; i < n; i++){
  49.             if(used[i] == false){
  50.                 if((left[3 * n - i - (y + 1)] == 0) && (right[3 * n + i - (y + 1)] == 0)){
  51.                     solve(i , (y + 1) , n , ref ok , ref left , ref right , ref used , ref a);
  52.                     if(ok == true){
  53.                         return ;
  54.                     }
  55.                 }
  56.             }
  57.         }
  58.         used[x] = false;
  59.         left[3 * n - x  - y]--;
  60.         right[3 * n + x - y]--;
  61.         a[x , y] = '.';
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement