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;
- }
- char ft_check_diag(char m[][8], char x, char 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;
- }
- char ft_check_queen(char m[][8], char x, char y)
- {
- char l;
- char 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(char m[][8], char deep, int *vars)
- {
- char i = 0;
- char j;
- char a;
- char b;
- char m_c[8][8];
- //printf("\nstart deep = %d\n", deep);
- //ft_print_matrix(m, 8);
- //printf("\n\n");
- if (deep == 8)
- {
- ft_print_matrix(m, 8);
- printf("\n\n");
- (*vars)++;
- printf("\n########\n");
- return;
- }
- while (i++ < 8)
- {
- j = 0;
- while (j++ < 8)
- {
- if (ft_check_queen(m, i - 1, j - 1) == 0)
- {
- a = 0;
- while(a++ < 8)
- {
- b = 0;
- while(b++ < 8)
- m_c[a - 1][b - 1] = m[a - 1][b - 1];
- }
- m_c[i - 1][j - 1]++;
- ft_distribute_queens(m_c, deep + 1, vars);
- }
- }
- }
- //printf("\nend deep = %d\n", deep);
- //ft_print_matrix(m, 8);
- }
- void ft_copy(char m[][8], char m_c[][8])
- {
- char i = 0;
- char j = 0;
- while(i++ < 8)
- {
- j = 0;
- while(j++ < 8)
- m_c[i - 1][j - 1] = m[i - 1][j - 1];
- }
- }*/
- int ft_check_diag(int *data, int x, int y)
- {
- int i;
- int j;
- int a;
- int b;
- i = 0;
- j = 0;
- while (i < 8)
- {
- if (data[i] != 9)
- {
- if (x >= i)
- a = x - i;
- else
- a = i - x;
- if (y >= data[i])
- b = y - data[i];
- else
- b = data[i] - y;
- if (a == b)
- return (0);
- }
- i++;
- }
- return (1);
- }
- int ft_check_queen(int *data, int x, int y)
- {
- int i;
- i = 0;
- //printf("\n########");
- if (data[x] != 9)
- {
- //printf("\n*** 1\n");
- return (0);
- }
- while (i < 8)
- {
- if (data[i++] == y)
- {
- //printf("\n*** 2\n");
- return (0);
- }
- }
- return ft_check_diag(data, x, y);
- }
- void ft_distribute_queens(int *data, int deep, int *vars)
- {
- int i;
- int j;
- int k;
- int data_c[8];
- if (deep == 2)
- {
- for (int i = 0; i < 8; i++)
- {
- printf("%d ", data[i]);
- }
- printf("\n\n");
- (*vars)++;
- printf("\n########\n");
- return;
- }
- i = 0;
- while (i++ < 8)
- {
- j = 0;
- while (j++ < 8)
- {
- if (ft_check_queen(data, i - 1, j - 1))
- {
- k = 0;
- while (k++ < 8)
- data_c[k - 1] = data[k - 1];
- data_c[i - 1] = j - 1;
- ft_distribute_queens(data_c, deep + 1, vars);
- }
- }
- }
- }
- int main(void)
- {
- int data[8];
- int vars = 0;
- for (int i = 0; i < 8; i++)
- {
- data[i] = 9;
- }
- //data[2] = 3;
- for (int i = 0; i < 8; i++)
- {
- printf("%d ", data[i]);
- }
- printf("\n");
- ft_distribute_queens(data, 0, &vars);
- printf("\n%d \n", vars);
- printf("%d %d %d %d %d", ft_check_queen(data, 0, 3), ft_check_queen(data, 2, 6), ft_check_queen(data, 4, 5), ft_check_queen(data, 5, 0), ft_check_queen(data, 7, 7));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement