Advertisement
liftchampion

day 04 ex 08

Oct 20th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.46 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3.                             Online C Compiler.
  4.                 Code, Compile, Run and Debug C program online.
  5. Write your code in this editor and press "Run" button to compile and execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. #include<stdio.h>
  10.  
  11. void ft_print_matrix(int m[][8], int size)
  12. {
  13.     int i;
  14.     int j;
  15.    
  16.     i = 0;
  17.     while (i < size)
  18.     {
  19.         j = 0;
  20.         while (j < size)
  21.         {
  22.             printf("%d  ", m[i][j]);
  23.             j++;
  24.         }
  25.         printf("\n");
  26.         i++;
  27.     }
  28. }
  29.  
  30. void ft_fill_matrix(int m[][8], int size)
  31. {
  32.     int i;
  33.     int j;
  34.    
  35.     i = 0;
  36.     while (i < size)
  37.     {
  38.         j = 0;
  39.         while (j < size)
  40.         {
  41.             m[i][j] = 0;
  42.             j++;
  43.         }
  44.         i++;
  45.     }
  46. }
  47.  
  48. int ft_set_queen(int m[][8], int x, int y)
  49. {
  50.     m[x][y] = 1;
  51. }
  52.  
  53. int ft_check_line(int m[][8], int x, int y, char dir)
  54. {
  55.     int sum;
  56.     int i;
  57.    
  58.     sum = 0;
  59.     i = 0;
  60.     while (i < 8)
  61.     {
  62.         if (dir == 'H')
  63.         {
  64.             sum += m[x][i];
  65.         }
  66.         if (dir == 'V')
  67.         {
  68.             sum += m[i][y];
  69.         }
  70.         i++;
  71.     }
  72.     return sum;
  73. }
  74.  
  75. int ft_check_diag(int m[][8], int x, int y, int dir)
  76. {
  77.     int sum;
  78.     int i;
  79.     int b;
  80.    
  81.     i = 0;
  82.     sum = 0;
  83.     b = y - dir * x;
  84.     while (i < 8)
  85.     {
  86.         if (dir * i + b >= 0 && dir * i + b < 8)
  87.         {
  88.             sum += m[i][dir * i + b];
  89.             //printf("## %d\n", sum);
  90.         }
  91.        
  92.         i++;
  93.     }
  94.    
  95.     //printf("### %d\n", sum);
  96.    
  97.    
  98.     return sum;
  99. }
  100.  
  101.  
  102.  
  103. int ft_check_queen(int m[][8], int x, int y)
  104. {
  105.     int l;
  106.     int d;
  107.    
  108.     l = ft_check_line(m, x, y, 'H') + ft_check_line(m, x, y, 'V');
  109.     d = ft_check_diag(m, x, y, -1) + ft_check_diag(m, x, y, 1);
  110.     return (l + d + m[x][y]);
  111. }
  112.  
  113. void ft_distribute_queens(int m[][8], int deep, int *vars)
  114. {
  115.     int i = 0;
  116.     int j = 0;
  117.     int a;
  118.     int b;
  119.     int m_c[8][8];
  120.    
  121.     printf("\nstart deep = %d\n", deep);
  122.     ft_print_matrix(m, 8);
  123.     printf("\n\n");
  124.    
  125.     if (deep == 8)
  126.     {
  127.         (*vars)++;
  128.         return;
  129.     }
  130.    
  131.     while (i < 8)
  132.     {
  133.         while (j < 8)
  134.         {
  135.             if (ft_check_queen(m, i, j) == 0)
  136.             {
  137.                 a = 0;
  138.                 while(a++ < 8)
  139.                 {
  140.                     b = 0;
  141.                     while(b++ < 8)
  142.                         m_c[a - 1][b - 1] = m[a - 1][b - 1];
  143.                 }
  144.                 ft_distribute_queens(m_c, deep + 1, vars);
  145.             }
  146.         }
  147.         i++;
  148.     }
  149.     printf("\nend deep = %d\n", deep);
  150.     ft_print_matrix(m, 8);
  151. }
  152.  
  153. void ft_copy(int m[][8], int m_c[][8])
  154. {
  155.     int i = 0;
  156.     int j = 0;
  157.     while(i++ < 8)
  158.     {
  159.         j = 0;
  160.         while(j++ < 8)
  161.             m_c[i - 1][j - 1] = m[i - 1][j - 1];
  162.     }
  163. }
  164.  
  165.  
  166. int main(void)
  167. {
  168.     int m[8][8];
  169.     int m2[8][8];
  170.     int vars = 0;
  171.    
  172.    
  173.    
  174.  
  175.     ft_fill_matrix(m, 8);
  176.     //ft_print_matrix(m, 8);
  177.     //printf("\n");
  178.    
  179.     //ft_set_queen(m, 2, 3);
  180.     //ft_set_queen(m, 1, 2);
  181.    
  182.     ft_print_matrix(m, 8);
  183.     printf("\n");
  184.     //printf("%d", ft_check_queen_line(m));
  185.     printf("\n");
  186.     //ft_check_diag(m, 1, 2, 1);
  187.    
  188.    ft_distribute_queens(m, 0, &vars);
  189.    printf("\n=== %d", vars);
  190.    
  191.  
  192.     return 0;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement