Guest User

potatoes

a guest
Jan 29th, 2012
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define N 8
  5.  
  6. void showGrid(int **grid);
  7. int backtracking(int **grid, int l, int c);
  8. int acceptable(int **grid, int ligne, int colonne);
  9.  
  10. int main(){
  11.     int **grid;
  12.     int i, j;
  13.  
  14.     grid = calloc(N, sizeof(int*));
  15.     for(i=0; i<N; i++)
  16.         grid[i] = calloc(N, sizeof(int));
  17.  
  18.     for(i=0; i<N; i++)
  19.         for(j=0; j<N; j++)
  20.             grid[i][j]= 0;
  21.  
  22.     backtracking(grid, 0, 0);
  23.     return 0;
  24.  
  25. }
  26.  
  27. void showGrid(int **grid){
  28.     int i, j;
  29.     for(i=0; i<N; i++){
  30.         for(j=0; j<N; j++)
  31.             if(grid[i][j] != 0)
  32.                 printf("[%d] ", grid[i][j]);
  33.             else
  34.                 printf("[ ] ");
  35.         printf("\n");
  36.     }
  37. }
  38.  
  39. int acceptable(int ** grid, int ligne, int colonne){
  40.     int i, j;
  41.     //verification ligne - colonne
  42.     for(i=0; i<N; i++){
  43.         if(grid[i][colonne] == 1
  44.             return 0;
  45.         if(grid[ligne][i] == 1)
  46.             return 0;
  47.     }
  48.  
  49.     //verification diagonales
  50.     j = colonne;
  51.     for(i = ligne; i<N && j<N; i++){
  52.         if( grid[i][j] == 1)
  53.             return 0;
  54.         j++;
  55.     }
  56.  
  57.     j = colonne;
  58.     for(i = ligne; i>= 0 && j >=0; i--){
  59.         if(grid[i][j] == 1)
  60.             return 0;
  61.         j--;
  62.     }
  63.  
  64.     j = colonne;
  65.     for(i= ligne; i<N && j>= 0; i++){
  66.         if(grid[i][j] == 1)
  67.             return 0;
  68.         j--;
  69.     }
  70.  
  71.     j = colonne;
  72.     for(i=ligne; i>=0 && j<N; i--){
  73.         if(grid[i][j] == 1)
  74.             return 0;
  75.         j++;
  76.     }
  77.  
  78.     return 1;
  79. }
  80.  
  81. int backtracking(int **g, int l, int c){
  82.     int colonne;
  83.  
  84.     for(colonne = c; colonne <N; colonne ++){
  85.         if(acceptable(g, l, colonne) == 1){
  86.             g[l][colonne] = 1;
  87.             printf("\n");
  88.             showGrid(g);
  89.             backtracking(g, l+1, 0);
  90.         }else
  91.             g[l][colonne] = 0;
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment