Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*
  4. Sencilla solución de el problema de las 8 reinas usando recursividad
  5. (backtracking), con arrays dinámicos. (Este código solo imprime una solución)
  6. */
  7. int *crearVec(int t);
  8. void llenarPositivo(int *v,int t);
  9. void reinas(int i,int *vec,int *puesto,int *diag2_1,int *diag1_2);
  10. void imp(int *vec);
  11. int reina=0;
  12. int main(){
  13. int *vec=NULL,*puesto=NULL,*diag2_1=NULL,*diag1_2=NULL;
  14. vec = crearVec(8);
  15. puesto = crearVec(8);
  16. diag2_1 = crearVec(15);
  17. diag1_2 = crearVec(15);
  18. llenarPositivo(puesto,8);
  19. llenarPositivo(diag2_1,15);
  20. llenarPositivo(diag1_2,15);
  21. reinas(0,vec,puesto,diag2_1,diag1_2);
  22. imp(vec);
  23. return 0;
  24. }
  25.  
  26. int *crearVec(int t){
  27. int *v=NULL;
  28. if((v=malloc(sizeof(int)*t))==NULL){
  29. printf("Sin memoria suficiente\n");
  30. return NULL;
  31. }
  32. return v;
  33.  
  34. }
  35.  
  36. void llenarPositivo(int *v,int t){
  37. int i;
  38. for(i=0;i<t;i++){
  39. v[i] = 1;
  40. }
  41. }
  42.  
  43. void reinas(int i,int *vec,int *puesto,int *diag2_1,int *diag1_2){
  44. int j;
  45. for(j=0;j<8;j++){
  46. if(puesto[j] && diag2_1[i+j] && diag1_2[i-j+7]){
  47. vec[i] = j;
  48. puesto[j] = 0;
  49. diag2_1[i+j] = 0;
  50. diag1_2[i-j+7] = 0;
  51. reina++;
  52. if(i<7){
  53. reinas(i+1,vec,puesto,diag2_1,diag1_2);
  54. if(reina<8){
  55. puesto[j] = 1;
  56. diag2_1[i+j] = 1;
  57. diag1_2[i-j+7] = 1;
  58. reina--;
  59. }
  60. }
  61. }
  62.  
  63. }
  64.  
  65. }
  66.  
  67. void imp(int *vec){
  68. int i,j;
  69. printf("###-Tablero-###\n");
  70. for(i=0;i<8;i++){
  71. for(j=0;j<8;j++){
  72. if(j==vec[i]){
  73. printf(" 4 ");
  74. }else{
  75. printf(" 0 ");
  76. }
  77. }
  78. printf("\n");
  79. }
  80.  
  81. printf("###-Coordenadas-###\n");
  82. for(i=0;i<8;i++){
  83. for(j=0;j<8;j++){
  84. if(j==vec[i]){
  85. printf("%d,%d\n",i,j);
  86. }
  87. }
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement