Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /*
  5.     OQ FAZER:
  6.     - ELSE EM CADA CONDICAO DE IF DO SWITCH PRINCIPAL PARA TESTAR SITUACAO DE VISITADO
  7. */
  8.  
  9. struct matriz {
  10.     char c; // valor da casa do mapa
  11.     int v; // visitado ou nao
  12. };
  13.  
  14. typedef struct matriz m;
  15.  
  16. int testa_limite(int i, int j, int a, int l) {
  17.     if(i >= a || j >= l || i < 0 || j < 0) return 0;
  18.     return 1;
  19. }
  20.  
  21. void testa_direcao(int* i, int* j, int direcao) {
  22.     //printf("testei a direcao!\n");
  23.     switch(direcao) {
  24.         case 0: (*i)--;
  25.             break;
  26.         case 1: (*j)++;
  27.             break;
  28.         case 2: (*i)++;
  29.             break;
  30.         case 3: (*j)--;
  31.             break;
  32.         default: break;
  33.     }
  34. }
  35.  
  36. void mostra_mapa(m mapa[][100], int a, int l) {
  37.     int i, j;
  38.  
  39.     printf("Mapa: \n");
  40.     for(i = 0; i < a; i++) {
  41.         for(j = 0; j< l; j++) {
  42.             printf("%c", mapa[i][j].c);
  43.         }
  44.         printf("\n");
  45.     }
  46.  
  47.     printf("\n");
  48. }
  49.  
  50. int main(void) {
  51.     int l, a, i, j, tesouro = 0, direcao, valido;
  52.     char temp;
  53.     m mapa[100][100];
  54.    
  55.     scanf("%d", &l);
  56.     scanf("%d", &a);
  57.  
  58.     scanf("%c", &temp); // retira \n do stream
  59.  
  60.     for(i = 0; i < 100; i++) {
  61.         for(j = 0; j < 100; j++) {
  62.             mapa[i][j].c = 'X';
  63.             mapa[i][j].v = 0;
  64.         }
  65.     }
  66.  
  67.     for(i = 0; i < a; i++) {
  68.         for(j = 0; j < l; j++) {
  69.             scanf("%c", &temp);
  70.             if(temp != '\n') {
  71.                 if(temp == '*') tesouro++;
  72.                 mapa[i][j].c = temp;
  73.             } else j--;
  74.         }
  75.     }
  76.  
  77.     //mostra_mapa(mapa, a, l);
  78.  
  79.     i = 0; j = 0; valido = -1;
  80.     if(tesouro != 0) {
  81.         while(1) {
  82.             //printf("where was i: %c - [%d][%d]\n", mapa[i][j], i, j);
  83.             mapa[i][j].v = 1;
  84.             //printf("%c", mapa[i][j].c);
  85.  
  86.             switch(mapa[i][j].c) {
  87.                 case '^': i--; direcao = 0;
  88.                     if(!testa_limite(i, j, a, l)) valido = 0;
  89.                     if(mapa[i][j].v == 1) valido = 0;
  90.                     break;
  91.                 case '>': j++; direcao = 1;
  92.                     if(!testa_limite(i, j, a, l)) valido = 0;
  93.                     if(mapa[i][j].v == 1) valido = 0;              
  94.                     break;
  95.                 case 'v': i++; direcao = 2;
  96.                     if(!testa_limite(i, j, a, l)) valido = 0;
  97.                     if(mapa[i][j].v == 1) valido = 0;
  98.                     break;
  99.                 case '<': j--; direcao = 3;
  100.                     if(!testa_limite(i, j, a, l)) valido = 0;
  101.                     if(mapa[i][j].v == 1) valido = 0;
  102.                     break;
  103.                 case '*': valido = 1; //printf("acheeeei\n");
  104.                     break;
  105.                 default: testa_direcao(&i, &j, direcao);
  106.                     break;
  107.             }
  108.  
  109.             //printf("where am i: %c - [%d][%d]\n", mapa[i][j], i, j);
  110.  
  111.            
  112.             if(valido != -1) break;
  113.         }
  114.         //printf("\n");
  115.     }
  116.  
  117.     if(valido == 1) printf("*\n");
  118.     else printf("!\n");
  119.  
  120.     return 0;  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement