Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. char* trim(char mat[][6], int* rezN, int* rezM);
  4. char* rotate90(char *predmet, int n, int m);
  5. int locate(char kofer[][50], int n, int m, char *predmet, int pN, int pM);
  6.  
  7. int main(){
  8. int N, M, brojac = 0;
  9. char mat[50][50];
  10.  
  11. do{
  12. scanf("%d %d", &N, &M);
  13. }while(N < 1 || N > 50 || M < 1 || M > 50);
  14.  
  15. int i, j;
  16. for(i = 0; i < N; i++){
  17. for(j = 0; j < M; j++){
  18. scanf(" %c", &mat[i][j]);
  19. }
  20. }
  21.  
  22. int k;
  23. do{
  24. scanf("%d", &k);
  25. }while(k < 1 || k > 10);
  26.  
  27. char *opasniPredmetTRIM = NULL;
  28. int z, brojRotacija, rezultat[10];
  29. char opasniPredmet[6][6];
  30. for(z = 0; z < k; z++){
  31. for(i = 0; i < 6; i++){
  32. for(j = 0; j < 6; j++){
  33. scanf(" %c", &opasniPredmet[i][j]);
  34. }
  35. }
  36.  
  37. int trimN = 6, trimM = 6;
  38. opasniPredmetTRIM = trim(opasniPredmet, &trimN, &trimM); // TRIMMANJE OPASNOG PREDMETA
  39.  
  40. if(locate(mat, N, M, opasniPredmetTRIM, trimN, trimM)){ // PROVJERA OPASNOG PREDMETA
  41. rezultat[brojac] = z + 1;
  42. brojac++;
  43. }
  44. else{
  45. for(brojRotacija = 0; brojRotacija < 3; brojRotacija++){
  46. rotate90(opasniPredmetTRIM, trimN, trimM); // ROTACIJA OPASNOG PREDMETA
  47. int swap = trimN;
  48. trimN = trimM;
  49. trimM = swap;
  50.  
  51. if(locate(mat, N, M, opasniPredmetTRIM, trimN, trimM)){ // PROVJERA OPASNOG PREDMETA
  52. rezultat[brojac] = z + 1;
  53. brojac++;
  54. break;
  55. }
  56. }
  57. }
  58. }
  59.  
  60. if(brojac == 0){
  61. printf("Mozete proci.");
  62. return 0;
  63. }
  64. printf("Opasni predmeti: ");
  65. for(i = 0; i < brojac; i++){
  66. if(i == brojac-1){
  67. printf("%d", rezultat[i]);
  68. break;
  69. }
  70. printf("%d ", rezultat[i]);
  71. }
  72. printf("\nVODI GA!");
  73. return 0;
  74. }
  75.  
  76. char* trim(char mat[][6], int* rezN, int* rezM){
  77. int i, j;
  78. int zavrsniStupac = -1, zavrsniRed;
  79. int pocetniStupac = -1, pocetniRed = -1;
  80. int povratniRed, povratniStupac;
  81.  
  82. for(i = 0; i < *rezN; i++){
  83. for(j = 0; j < *rezM; j++){
  84. if(mat[i][j] == '+' ||
  85. mat[i][j] == '|' ||
  86. mat[i][j] == '-' ||
  87. mat[i][j] == '*' ||
  88. mat[i][j] == '#'){
  89. while(pocetniRed == -1){
  90. pocetniRed = i;
  91. }
  92. while(pocetniStupac == -1 || j < pocetniStupac){
  93. pocetniStupac = j;
  94. }
  95. while(j > zavrsniStupac){
  96. zavrsniStupac = j;
  97. }
  98. zavrsniRed = i;
  99. }
  100. }
  101. }
  102.  
  103. int red = zavrsniRed - pocetniRed + 1;
  104. int stup = zavrsniStupac - pocetniStupac + 1;
  105. *rezN = red;
  106. *rezM = stup;
  107.  
  108. char *trimPredmet = NULL;
  109. trimPredmet = (char *) malloc(red*stup*sizeof(char)); // ALOKACIJA TRIMMANOG PREDMETA
  110. for(i = pocetniRed; i <= zavrsniRed; i++){
  111. for(j = pocetniStupac; j <= zavrsniStupac; j++){
  112. *(trimPredmet+(i-pocetniRed)*stup+(j-pocetniStupac)) = mat[i][j];
  113. }
  114. }
  115. return trimPredmet;
  116. }
  117.  
  118. char* rotate90(char *predmet, int n, int m){
  119. int i, j;
  120.  
  121. for(j = m - 1; j >= 0; j--){
  122. for(i = 0; i < n; i++){
  123. if(*(predmet+i*m+j) == '|') *(predmet+i*m+j) = '-';
  124. else if(*(predmet+i*m+j) == '-') *(predmet+i*m+j) = '|';
  125. }
  126. }
  127.  
  128. char rotiranaMatrica[m][n];
  129. for(j = m - 1; j >= 0; j--){
  130. for(i = 0; i < n; i++){
  131. rotiranaMatrica[m-j-1][i] = *(predmet+i*m+j);
  132. }
  133. }
  134.  
  135. free(predmet);
  136. predmet = (char *) malloc(m*n*sizeof(char)); // ALOKACIJA ROTIRANOG PREDMETA
  137.  
  138. for(i = 0; i < m; i++){
  139. for(j = 0; j < n; j++){
  140. *(predmet+i*n+j) = rotiranaMatrica[i][j];
  141. }
  142. }
  143. }
  144.  
  145. int locate(char kofer[][50], int n, int m, char *predmet, int pN, int pM){
  146. int i, j, unazad;
  147. char prviScan;
  148.  
  149. for(j = 0; j < pM; j++){
  150. if(*(predmet+0*pM+j) != '.'){
  151. prviScan = *(predmet+0*pM+j);
  152. unazad = j;
  153. break;
  154. }
  155. }
  156.  
  157. int k, z;
  158. int N = 0;
  159. int M = 0;
  160. for(i = 0; i < n; i++){
  161. for(j = 0; j < m; j++){
  162. if(kofer[i][j] == prviScan){
  163. for(k = i; k < i+pN; k++){
  164. for(z = j-unazad; z < j-unazad+pM; z++){
  165. if(*(predmet+N*pM+M) != '.'){
  166. if(kofer[k][z] != *(predmet+N*pM+M)){
  167. goto jump;
  168. }
  169. }
  170. if(z == j-unazad+pM-1 && k == i+pN-1){
  171. return 1;
  172. }
  173. M++;
  174. }
  175. N++;
  176. M = 0;
  177.  
  178. }
  179. }
  180. jump:
  181. N = 0;
  182. M = 0;
  183. }
  184. }
  185. return 0;
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement