Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define N 8
- void showGrid(int **grid);
- int backtracking(int **grid, int l, int c);
- int acceptable(int **grid, int ligne, int colonne);
- int main(){
- int **grid;
- int i, j;
- grid = calloc(N, sizeof(int*));
- for(i=0; i<N; i++)
- grid[i] = calloc(N, sizeof(int));
- for(i=0; i<N; i++)
- for(j=0; j<N; j++)
- grid[i][j]= 0;
- backtracking(grid, 0, 0);
- return 0;
- }
- void showGrid(int **grid){
- int i, j;
- for(i=0; i<N; i++){
- for(j=0; j<N; j++)
- if(grid[i][j] != 0)
- printf("[%d] ", grid[i][j]);
- else
- printf("[ ] ");
- printf("\n");
- }
- }
- int acceptable(int ** grid, int ligne, int colonne){
- int i, j;
- //verification ligne - colonne
- for(i=0; i<N; i++){
- if(grid[i][colonne] == 1
- return 0;
- if(grid[ligne][i] == 1)
- return 0;
- }
- //verification diagonales
- j = colonne;
- for(i = ligne; i<N && j<N; i++){
- if( grid[i][j] == 1)
- return 0;
- j++;
- }
- j = colonne;
- for(i = ligne; i>= 0 && j >=0; i--){
- if(grid[i][j] == 1)
- return 0;
- j--;
- }
- j = colonne;
- for(i= ligne; i<N && j>= 0; i++){
- if(grid[i][j] == 1)
- return 0;
- j--;
- }
- j = colonne;
- for(i=ligne; i>=0 && j<N; i--){
- if(grid[i][j] == 1)
- return 0;
- j++;
- }
- return 1;
- }
- int backtracking(int **g, int l, int c){
- int colonne;
- for(colonne = c; colonne <N; colonne ++){
- if(acceptable(g, l, colonne) == 1){
- g[l][colonne] = 1;
- printf("\n");
- showGrid(g);
- backtracking(g, l+1, 0);
- }else
- g[l][colonne] = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment