Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #define MAX_SIZE 10
  3.  
  4. void ReadMatrix(int mat[MAX_SIZE][MAX_SIZE], int* size);
  5. int IsOrdered(int mat[MAX_SIZE][MAX_SIZE], int size, int index);
  6. void Step(int mat[MAX_SIZE][MAX_SIZE], int size, int layer);
  7. int OrderMat(int mat[MAX_SIZE][MAX_SIZE], int size, int* a);
  8. void PrintMat(int mat[MAX_SIZE][MAX_SIZE],int *size);
  9.  
  10. int main()
  11. {
  12. int mat_size;
  13. int x , i , M = MAX_SIZE , a[5] = {0}, mat[MAX_SIZE][MAX_SIZE] , *size = &M;
  14. ReadMatrix(mat,size);
  15. x = OrderMat(mat,*size,a);
  16. mat_size=*size;
  17.  
  18.  
  19. PrintMat(mat,size);
  20. if(x==0)
  21. printf("CANNOT BE ORDERED\n");
  22. if(x==1)
  23. {
  24. printf("CAN BE ORDERED WITH THE FOLLOWING STEPS:\n");
  25. for(i=0 ; i<((*size/2)+*size%2); i++)
  26. printf("%d : %d\n",i+1,a[i]);
  27. }
  28. if(x==2)
  29. printf("ALREADY ORDERED\n");
  30. return 0;
  31. }
  32.  
  33.  
  34. //working correctly.
  35. void ReadMatrix(int mat[MAX_SIZE][MAX_SIZE], int* size)
  36. {
  37. int i,j ;
  38. int input;
  39.  
  40. for ( i = 0 ; i < MAX_SIZE ; i++)
  41. {
  42. for ( j = 0 ; j < MAX_SIZE ; j++)
  43. {
  44. mat[i][j] = -1;
  45. }
  46. }
  47.  
  48. scanf("%d", &input);
  49. *size = input;
  50.  
  51. for ( i = 0 ; i < input ; i++)
  52. {
  53. for ( j = 0 ; j < input ; j++)
  54. {
  55. scanf("%d", &mat[i][j]);
  56. }
  57. }
  58. }
  59.  
  60.  
  61. int IsOrdered(int mat[MAX_SIZE][MAX_SIZE], int size, int index)
  62. {
  63. int i=0 , j=0;
  64.  
  65. //moving over the first line in a layer num(index)
  66. for( j = index - 1 ; j < size - index + 1 ; j++)
  67. {
  68. if(mat[index-1][j] != (index-1)*size + j + 1 )
  69. return 0;
  70. }
  71.  
  72. //moving over the last line in a layer(layer num = index).
  73. for( j = index - 1 ; j < size - index + 1 ; j++)
  74. {
  75. if(mat[size - index][j] != (size - index )*size + j + 1 )
  76. return 0;
  77. }
  78.  
  79. //col.
  80. for( i = index - 1; i < size - index + 1 ; i++ )
  81. {
  82. if(mat[i][index-1] != i*size + index)
  83. return 0;
  84.  
  85. }
  86.  
  87. for( i = index - 1; i < size - index + 1 ; i++ )
  88. {
  89. if( mat[i][size - index] != i*size + size - index + 1)
  90. return 0;
  91. }
  92.  
  93. return 1;
  94. }
  95.  
  96.  
  97. void Step(int mat[MAX_SIZE][MAX_SIZE], int size, int layer)
  98. {
  99.  
  100. int Row,Col;
  101. int Angle1 = mat[layer-1][size-layer] , Angle2 = mat[size-layer][size-layer] , Angle3 = mat[size-layer][layer-1];
  102. if ( (size-layer)!=(layer-1) )
  103. {
  104. for(Col = size-layer; Col > layer-1; Col--)
  105. {
  106. mat[layer-1][Col] = mat[layer-1][Col-1];
  107. }
  108.  
  109. for(Row = size-layer; Row > layer; Row--)
  110. {
  111. mat[Row][size-layer] = mat[Row-1][size-layer];
  112. mat[layer][size-layer] = Angle1;
  113. }
  114.  
  115. for(Col = layer-1; Col < size-layer-1; Col++)
  116. {
  117. mat[size-layer][Col] = mat[size-layer][Col+1];
  118. mat[size-layer][size-layer-1] = Angle2;
  119. }
  120.  
  121. for(Row = layer - 1; Row < size - layer; Row++)
  122. {
  123. mat[Row][layer-1] = mat[Row+1][layer-1];
  124. mat[size-layer-1][layer-1]=Angle3;
  125. }
  126.  
  127. }
  128. }
  129.  
  130.  
  131. int OrderMat(int mat[MAX_SIZE][MAX_SIZE], int size, int* a)
  132. {
  133. int i=0,x, c = 0 ,L = 0;
  134.  
  135. for(i=0 ; i <((size/2)+size%2); i++)
  136. {
  137. x = IsOrdered( mat, size, i+1);
  138. while(!x)
  139. {
  140. //printf("entered fucking here\n");
  141. c++;
  142. Step(mat, size, i+1);
  143. if(c>=40)
  144. return 0;
  145. x = IsOrdered( mat, size, i+1);
  146.  
  147. }
  148. a[i] = c;
  149. if(c!=0)
  150. L++;
  151. c=0;
  152. }
  153. if (L !=(size/2)+(size % 2))
  154. return 1;
  155. return 2;
  156.  
  157. }
  158.  
  159.  
  160. void PrintMat(int mat[MAX_SIZE][MAX_SIZE],int *size){
  161.  
  162.  
  163. //int row=*size, columns=*size;
  164. for (int row=0; row<*size; row++)
  165. {
  166. for(int columns=0; columns<*size; columns++)
  167. {
  168. printf("%d ", mat[row][columns]);
  169. }
  170. printf("\n");
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement