Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- char* trim(char mat[][6], int* rezN, int* rezM);
- char* rotate90(char *predmet, int n, int m);
- int locate(char kofer[][50], int n, int m, char *predmet, int pN, int pM);
- int main(){
- int N, M, brojac = 0;
- char mat[50][50];
- do{
- scanf("%d %d", &N, &M);
- }while(N < 1 || N > 50 || M < 1 || M > 50);
- int i, j;
- for(i = 0; i < N; i++){
- for(j = 0; j < M; j++){
- scanf(" %c", &mat[i][j]);
- }
- }
- int k;
- do{
- scanf("%d", &k);
- }while(k < 1 || k > 10);
- char *opasniPredmetTRIM = NULL;
- int z, brojRotacija, rezultat[10];
- char opasniPredmet[6][6];
- for(z = 0; z < k; z++){
- for(i = 0; i < 6; i++){
- for(j = 0; j < 6; j++){
- scanf(" %c", &opasniPredmet[i][j]);
- }
- }
- int trimN = 6, trimM = 6;
- opasniPredmetTRIM = trim(opasniPredmet, &trimN, &trimM); // TRIMMANJE OPASNOG PREDMETA
- if(locate(mat, N, M, opasniPredmetTRIM, trimN, trimM)){ // PROVJERA OPASNOG PREDMETA
- rezultat[brojac] = z + 1;
- brojac++;
- }
- else{
- for(brojRotacija = 0; brojRotacija < 3; brojRotacija++){
- rotate90(opasniPredmetTRIM, trimN, trimM); // ROTACIJA OPASNOG PREDMETA
- int swap = trimN;
- trimN = trimM;
- trimM = swap;
- if(locate(mat, N, M, opasniPredmetTRIM, trimN, trimM)){ // PROVJERA OPASNOG PREDMETA
- rezultat[brojac] = z + 1;
- brojac++;
- break;
- }
- }
- }
- }
- if(brojac == 0){
- printf("Mozete proci.");
- return 0;
- }
- printf("Opasni predmeti: ");
- for(i = 0; i < brojac; i++){
- if(i == brojac-1){
- printf("%d", rezultat[i]);
- break;
- }
- printf("%d ", rezultat[i]);
- }
- printf("\nVODI GA!");
- return 0;
- }
- char* trim(char mat[][6], int* rezN, int* rezM){
- int i, j;
- int zavrsniStupac = -1, zavrsniRed;
- int pocetniStupac = -1, pocetniRed = -1;
- int povratniRed, povratniStupac;
- for(i = 0; i < *rezN; i++){
- for(j = 0; j < *rezM; j++){
- if(mat[i][j] == '+' ||
- mat[i][j] == '|' ||
- mat[i][j] == '-' ||
- mat[i][j] == '*' ||
- mat[i][j] == '#'){
- while(pocetniRed == -1){
- pocetniRed = i;
- }
- while(pocetniStupac == -1 || j < pocetniStupac){
- pocetniStupac = j;
- }
- while(j > zavrsniStupac){
- zavrsniStupac = j;
- }
- zavrsniRed = i;
- }
- }
- }
- int red = zavrsniRed - pocetniRed + 1;
- int stup = zavrsniStupac - pocetniStupac + 1;
- *rezN = red;
- *rezM = stup;
- char *trimPredmet = NULL;
- trimPredmet = (char *) malloc(red*stup*sizeof(char)); // ALOKACIJA TRIMMANOG PREDMETA
- for(i = pocetniRed; i <= zavrsniRed; i++){
- for(j = pocetniStupac; j <= zavrsniStupac; j++){
- *(trimPredmet+(i-pocetniRed)*stup+(j-pocetniStupac)) = mat[i][j];
- }
- }
- return trimPredmet;
- }
- char* rotate90(char *predmet, int n, int m){
- int i, j;
- for(j = m - 1; j >= 0; j--){
- for(i = 0; i < n; i++){
- if(*(predmet+i*m+j) == '|') *(predmet+i*m+j) = '-';
- else if(*(predmet+i*m+j) == '-') *(predmet+i*m+j) = '|';
- }
- }
- char rotiranaMatrica[m][n];
- for(j = m - 1; j >= 0; j--){
- for(i = 0; i < n; i++){
- rotiranaMatrica[m-j-1][i] = *(predmet+i*m+j);
- }
- }
- free(predmet);
- predmet = (char *) malloc(m*n*sizeof(char)); // ALOKACIJA ROTIRANOG PREDMETA
- for(i = 0; i < m; i++){
- for(j = 0; j < n; j++){
- *(predmet+i*n+j) = rotiranaMatrica[i][j];
- }
- }
- }
- int locate(char kofer[][50], int n, int m, char *predmet, int pN, int pM){
- int i, j, unazad;
- char prviScan;
- for(j = 0; j < pM; j++){
- if(*(predmet+0*pM+j) != '.'){
- prviScan = *(predmet+0*pM+j);
- unazad = j;
- break;
- }
- }
- int k, z;
- int N = 0;
- int M = 0;
- for(i = 0; i < n; i++){
- for(j = 0; j < m; j++){
- if(kofer[i][j] == prviScan){
- for(k = i; k < i+pN; k++){
- for(z = j-unazad; z < j-unazad+pM; z++){
- if(*(predmet+N*pM+M) != '.'){
- if(kofer[k][z] != *(predmet+N*pM+M)){
- goto jump;
- }
- }
- if(z == j-unazad+pM-1 && k == i+pN-1){
- return 1;
- }
- M++;
- }
- N++;
- M = 0;
- }
- }
- jump:
- N = 0;
- M = 0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement