karlangadas

Nqueens

Sep 16th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define N 20
  5. //Nqueens
  6.  
  7. void printArray(int array[N][N],int n);
  8. int nqueens(int array[N][N],int nqueen,int n);
  9. int isValid(int array[N][N],int nqueen,int n,int i);
  10. int encuentrafila(int array[N][N],int j,int n);
  11.  
  12. int main(){
  13.     int n=8,res;
  14.     int array[N][N]={{0}};
  15.     printArray(array,n);
  16.     if (res=nqueens(array,1, n))
  17.         printArray(array,n);
  18.     return 0;
  19. }
  20.  
  21. void printArray(int array[N][N],int n){
  22.    
  23.     for (int i=0;i<n;i++){
  24.         for (int j=0;j<n;j++){
  25.             printf("%d ",array[i][j]);
  26.         }
  27.         printf("\n");
  28.     }
  29.     printf("\n");
  30. }
  31.  
  32. int nqueens(int array[N][N],int nqueen,int n){
  33.     if (nqueen==n+1)
  34.         return 1;
  35.     for (int i=0;i<n;i++){
  36.         if (isValid(array,nqueen,n,i)){
  37.             array[i][nqueen-1]=nqueen;
  38.             if (nqueens(array,nqueen+1, n))
  39.                 return 1;
  40.             else
  41.                 array[i][nqueen-1]=0;
  42.         }
  43.     }
  44.     return 0;
  45. }
  46.  
  47. int isValid(int array[N][N],int nqueen,int n,int f){
  48.     int k;
  49.     //fila
  50.     for (int i=0;i<nqueen;i++){
  51.         if (array[f][i]!=0)
  52.             return 0;
  53.     }
  54.     //diagonales
  55.     for (int j=0;j<nqueen;j++){
  56.         k = encuentrafila(array,j,n);
  57.         if (abs(k-f)==abs(j-(nqueen-1)))
  58.             return 0;  
  59.     }
  60.     return 1;
  61. }
  62.  
  63. int encuentrafila(int array[N][N],int j,int n){
  64.     for(int i=0;i<n;i++){
  65.         if (array[i][j]!=0)
  66.             return i;
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment