Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /*
- OQ FAZER:
- - ELSE EM CADA CONDICAO DE IF DO SWITCH PRINCIPAL PARA TESTAR SITUACAO DE VISITADO
- */
- struct matriz {
- char c; // valor da casa do mapa
- int v; // visitado ou nao
- };
- typedef struct matriz m;
- int testa_limite(int i, int j, int a, int l) {
- if(i >= a || j >= l || i < 0 || j < 0) return 0;
- return 1;
- }
- void testa_direcao(int* i, int* j, int direcao) {
- //printf("testei a direcao!\n");
- switch(direcao) {
- case 0: (*i)--;
- break;
- case 1: (*j)++;
- break;
- case 2: (*i)++;
- break;
- case 3: (*j)--;
- break;
- default: break;
- }
- }
- void mostra_mapa(m mapa[][100], int a, int l) {
- int i, j;
- printf("Mapa: \n");
- for(i = 0; i < a; i++) {
- for(j = 0; j< l; j++) {
- printf("%c", mapa[i][j].c);
- }
- printf("\n");
- }
- printf("\n");
- }
- int main(void) {
- int l, a, i, j, tesouro = 0, direcao, valido;
- char temp;
- m mapa[100][100];
- scanf("%d", &l);
- scanf("%d", &a);
- scanf("%c", &temp); // retira \n do stream
- for(i = 0; i < 100; i++) {
- for(j = 0; j < 100; j++) {
- mapa[i][j].c = 'X';
- mapa[i][j].v = 0;
- }
- }
- for(i = 0; i < a; i++) {
- for(j = 0; j < l; j++) {
- scanf("%c", &temp);
- if(temp != '\n') {
- if(temp == '*') tesouro++;
- mapa[i][j].c = temp;
- } else j--;
- }
- }
- //mostra_mapa(mapa, a, l);
- i = 0; j = 0; valido = -1;
- if(tesouro != 0) {
- while(1) {
- //printf("where was i: %c - [%d][%d]\n", mapa[i][j], i, j);
- mapa[i][j].v = 1;
- //printf("%c", mapa[i][j].c);
- switch(mapa[i][j].c) {
- case '^': i--; direcao = 0;
- if(!testa_limite(i, j, a, l)) valido = 0;
- if(mapa[i][j].v == 1) valido = 0;
- break;
- case '>': j++; direcao = 1;
- if(!testa_limite(i, j, a, l)) valido = 0;
- if(mapa[i][j].v == 1) valido = 0;
- break;
- case 'v': i++; direcao = 2;
- if(!testa_limite(i, j, a, l)) valido = 0;
- if(mapa[i][j].v == 1) valido = 0;
- break;
- case '<': j--; direcao = 3;
- if(!testa_limite(i, j, a, l)) valido = 0;
- if(mapa[i][j].v == 1) valido = 0;
- break;
- case '*': valido = 1; //printf("acheeeei\n");
- break;
- default: testa_direcao(&i, &j, direcao);
- break;
- }
- //printf("where am i: %c - [%d][%d]\n", mapa[i][j], i, j);
- if(valido != -1) break;
- }
- //printf("\n");
- }
- if(valido == 1) printf("*\n");
- else printf("!\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement