Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************
- Online C Compiler.
- Code, Compile, Run and Debug C program online.
- Write your code in this editor and press "Run" button to compile and execute it.
- *******************************************************************************/
- #include<stdio.h>
- void ft_print_matrix(int m[][8], int size)
- {
- int i;
- int j;
- i = 0;
- while (i < size)
- {
- j = 0;
- while (j < size)
- {
- printf("%d ", m[i][j]);
- j++;
- }
- printf("\n");
- i++;
- }
- }
- void ft_fill_matrix(int m[][8], int size)
- {
- int i;
- int j;
- i = 0;
- while (i < size)
- {
- j = 0;
- while (j < size)
- {
- m[i][j] = 0;
- j++;
- }
- i++;
- }
- }
- int ft_set_queen(int m[][8], int x, int y)
- {
- m[x][y] = 1;
- }
- int ft_check_line(int m[][8], int x, int y, char dir)
- {
- int sum;
- int i;
- sum = 0;
- i = 0;
- while (i < 8)
- {
- if (dir == 'H')
- {
- sum += m[x][i];
- }
- if (dir == 'V')
- {
- sum += m[i][y];
- }
- i++;
- }
- return sum;
- }
- int ft_check_diag(int m[][8], int x, int y, int dir)
- {
- int sum;
- int i;
- int b;
- i = 0;
- sum = 0;
- b = y - dir * x;
- while (i < 8)
- {
- if (dir * i + b >= 0 && dir * i + b < 8)
- {
- sum += m[i][dir * i + b];
- //printf("## %d\n", sum);
- }
- i++;
- }
- //printf("### %d\n", sum);
- return sum;
- }
- int ft_check_queen(int m[][8], int x, int y)
- {
- int l;
- int d;
- l = ft_check_line(m, x, y, 'H') + ft_check_line(m, x, y, 'V');
- d = ft_check_diag(m, x, y, -1) + ft_check_diag(m, x, y, 1);
- return (l + d + m[x][y]);
- }
- void ft_distribute_queens(int m[][8], int deep, int *vars)
- {
- int i = 0;
- int j = 0;
- int a;
- int b;
- int m_c[8][8];
- printf("\nstart deep = %d\n", deep);
- ft_print_matrix(m, 8);
- printf("\n\n");
- if (deep == 8)
- {
- (*vars)++;
- return;
- }
- while (i < 8)
- {
- while (j < 8)
- {
- if (ft_check_queen(m, i, j) == 0)
- {
- a = 0;
- while(a++ < 8)
- {
- b = 0;
- while(b++ < 8)
- m_c[a - 1][b - 1] = m[a - 1][b - 1];
- }
- ft_distribute_queens(m_c, deep + 1, vars);
- }
- }
- i++;
- }
- printf("\nend deep = %d\n", deep);
- ft_print_matrix(m, 8);
- }
- void ft_copy(int m[][8], int m_c[][8])
- {
- int i = 0;
- int j = 0;
- while(i++ < 8)
- {
- j = 0;
- while(j++ < 8)
- m_c[i - 1][j - 1] = m[i - 1][j - 1];
- }
- }
- int main(void)
- {
- int m[8][8];
- int m2[8][8];
- int vars = 0;
- ft_fill_matrix(m, 8);
- //ft_print_matrix(m, 8);
- //printf("\n");
- //ft_set_queen(m, 2, 3);
- //ft_set_queen(m, 1, 2);
- ft_print_matrix(m, 8);
- printf("\n");
- //printf("%d", ft_check_queen_line(m));
- printf("\n");
- //ft_check_diag(m, 1, 2, 1);
- ft_distribute_queens(m, 0, &vars);
- printf("\n=== %d", vars);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement