Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void switchArray(int **arr, int **arrcop, int size){
  5. for (int y =0; y < size; y++)
  6. for(int z =0; z < size; z++)
  7. arrcop[y][z]=arr[y][z];
  8.  
  9. return;
  10. }
  11.  
  12. void checkzero(int **arr,int *done,int size,int *row,int *col){
  13. int plain, simple;
  14. for (plain =0; plain < size; plain++){
  15. for(simple =0; simple < size; simple++){
  16. if(arr[plain][simple]==0){
  17. *row= plain;
  18. *col= simple;
  19. return;
  20. }
  21. }
  22. }
  23. *done = 1;
  24. return;
  25. }
  26.  
  27. int magicDiag(int *row, int *col, int ch, int **arr, int size){
  28. if (*row ==0){
  29. for(int plain=1; plain < size; plain++){
  30. if(*col ==0){
  31. if(arr[*row+plain][*col+plain]==ch)
  32. return 0;}
  33. if(*col == size-1){
  34. if(arr[*row+plain][*col-plain]== ch)
  35. return 0;}
  36. }
  37. return 1;
  38. }
  39. if(*row==size-1){
  40. for(int plain=1; plain < size; plain++){
  41. if(*col ==0){
  42. if(arr[*row-plain][*col+plain]==ch)
  43. return 0;}
  44. if(*col == size-1){
  45. if(arr[*row-plain][*col-plain]== ch)
  46. return 0;}
  47. }
  48. return 1;
  49. }
  50.  
  51. if (*row==*col){
  52. for (int plain =1; plain <= *col; plain++){
  53. if(arr[*row-plain][*col-plain]==ch)
  54. return 0;}
  55. for (int plain =1; plain < size - *col; plain++){
  56. if(arr[*row+plain][*col+plain]==ch)
  57. return 0;}
  58. return 1;}
  59. if (*col == size-1-*row){
  60. for (int plain = 1; plain <= *row; plain++){
  61. if(arr[*row-plain][*col+plain]==ch)
  62. return 0;}
  63. for (int plain =1; plain <= *col; plain++){
  64. if(arr[*row+plain][*col-plain]==ch)
  65. return 0;}
  66. return 1;}
  67. }
  68.  
  69. int magicCol(int *row, int *col, int ch, int **arr, int size){
  70. if (*row==0){
  71. for (int plain = 1; plain < size; plain++){
  72. if (arr[plain][*col]== ch)
  73. return 0;}
  74. return 1;
  75.  
  76. }
  77. else if(*row==size-1){
  78. for (int plain = 0; plain < size-1; plain++){
  79. if (arr[plain][*col]==ch)
  80. return 0;}
  81. return 1;
  82.  
  83. }
  84. else{
  85. for (int plain =0; plain < *row; plain++){
  86. if(arr[plain][*col]==ch)
  87. return 0;}
  88.  
  89. for (int plain = *row+1; plain < size; plain++){
  90. if(arr[plain][*col]== ch);
  91. return 0;}
  92. return 1;
  93. }
  94. }
  95.  
  96.  
  97. int magicRow(int *row, int *col, int ch, int **arr, int size){
  98. if (*col==0){
  99. for (int plain = 1; plain < size; plain++){
  100. if (arr[*row][plain]== ch)
  101. return 0;}
  102. return 1;
  103.  
  104. }
  105. else if(*col==size-1){
  106. for (int plain = 0; plain < size-1; plain++){
  107. if (arr[*row][plain]==ch)
  108. return 0;}
  109. return 1;
  110.  
  111. }
  112. else{
  113. for (int plain =0; plain < *col; plain++){
  114. if(arr[*row][plain]==ch)
  115. return 0;}
  116.  
  117. for (int plain = *col+1; plain < size; plain++){
  118. if(arr[*row][plain]== ch);
  119. return 0;}
  120. return 1;
  121. }
  122. }
  123.  
  124.  
  125. int checkvalid(int *row,int *col, int ch, int **arr, int size){
  126. int check = 0;
  127. int len, wid;
  128. for(len = 0; len < size; len++){
  129. for(wid = 0; wid < size; wid++){
  130. check = magicDiag(row, col, ch, arr, size);
  131. if(check == 0)
  132. return 0;
  133. check = magicCol(row, col, ch, arr, size);
  134. if(check == 0)
  135. return 0;
  136. check = magicRow(row, col, ch, arr, size);
  137. if(check == 0)
  138. return 0;
  139. }
  140. }
  141.  
  142. return check;
  143. }
  144.  
  145.  
  146. void primary(int **arr,int size,int *done, int **arrcop,int *count){
  147. int *ptRow, *ptCol;
  148. int row = 0;
  149. int col = 0;
  150. ptRow = &row;
  151. ptCol= &col;
  152.  
  153. int ch=0;
  154. checkzero(arr, done, size, ptRow, ptCol);
  155. if(*done){
  156. *done =0;
  157. *count=*count+1;
  158. printf("Count is %d\n", *count);
  159. switchArray(arr, arrcop, size);
  160. return;}
  161. for(ch = 1; ch <= size; ch++){
  162. int x = checkvalid(ptRow, ptCol, ch, arr, size);
  163. printf("%d\n", x);
  164. if(x){
  165. arr[row][col]=ch;
  166. for(int each = 0; each < size; each++){
  167. for(int every = 0; every < size; every++){
  168. printf("%d ", arr[each][every]);
  169. }
  170. printf("\n");
  171. }
  172. primary(arr, size, done, arrcop, count);
  173. arr[row][col]=0;}
  174.  
  175. }
  176. return;
  177. }
  178.  
  179.  
  180. void printArray(FILE *fpo, int **arr,int *count, int size){
  181. fprintf(fpo, "%d\n", *count);
  182. for (int print = 0; print < size; print++){
  183. for (int print2 = 0; print2 < size; print2++){
  184. fprintf(fpo, "%d ", arr[print][print2]);
  185. }
  186. fprintf(fpo, "\n");
  187. }
  188. }
  189.  
  190.  
  191. int main (int argc, char *argv[]){
  192. FILE *fpi, *fpo;
  193. fpi = fopen(argv[1],"r");
  194. fpo = fopen(argv[2],"w");
  195.  
  196. int size;
  197. fscanf(fpi,"%d",&size);
  198. int a;
  199.  
  200. int **arr;
  201. arr = malloc(sizeof(int *) * size);
  202. for (a=0; a < size; a++)
  203. arr[a] = malloc(sizeof(int)*size);
  204.  
  205. int **arrcop = NULL;
  206. arrcop = malloc(sizeof(int *) * size);
  207. for (a = 0; a < size; a++)
  208. arrcop[a]= malloc(sizeof(int)*size);
  209.  
  210. int x, y;
  211.  
  212. for (x = 0; x < size; x++){
  213. for (y = 0; y < size; y++){
  214. fscanf(fpi,"%d", &arr[x][y]);
  215. }
  216. }
  217.  
  218. int *pt1, *pt2;
  219. int done = 0;
  220. int count = 0;
  221. pt1 = &done;
  222. pt2 = &count;
  223. //printArray(stdout, arr, pt1, size);
  224. primary(arr, size, pt1, arrcop, pt2);
  225. printArray(fpo, arrcop, pt1, size);
  226.  
  227. return 0;
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement