Ir ao conteúdo
  • Cadastre-se

Luiz Fernando Rosa

Membro Júnior
  • Posts

    9
  • Cadastrado em

  • Última visita

Reputação

6
  1. Tenho esse algoritmo que percorre o labirinto de forma recursiva , mas quando chega na matriz [6][6] ele nao consegue descer e volta em vez de achar a saida ( no caso 3 e a saida) #include <stdio.h> #include <stdlib.h> #include<string.h> #include <conio.h> int labirinto(int x_atual, int y_atual,char **maze, int altura,int largura) { printf("\n\n %d ,%d \n\n",x_atual,y_atual); if (x_atual < 0 || x_atual >= largura || y_atual < 0 || y_atual >= altura) return 0; char aqui = maze[x_atual][y_atual]; if (aqui == 3) return 1; if(aqui == 0 || aqui == 2) return 0; print_maze(maze,largura,altura); printf("\n\n\n"); maze[x_atual][y_atual] = 2; if(labirinto(x_atual ,y_atual-1,maze,largura,altura))return 1; print_maze(maze,largura,altura); printf("\n\n\n"); maze[x_atual][y_atual] =2; if(labirinto(x_atual+1,y_atual,maze,largura,altura))return 1; print_maze(maze,largura,altura); printf("\n\n\n"); maze[x_atual][y_atual] = 2; if(labirinto(x_atual,y_atual+1,maze,largura,altura))return 1; print_maze(maze,largura,altura); printf("\n\n\n"); maze[x_atual][y_atual] = 2; if(labirinto(x_atual-1,y_atual,maze,largura,altura))return 1; maze[x_atual][y_atual] = 1; print_maze(maze,largura,altura); printf("\n\n\n"); return 0; } void print_maze(char **maze, int largura, int altura) { for (int i=0; i<13; i++ ){ for (int j=0; j<10; j++ ) { printf ("%d", maze[i][j]); } printf("\n"); } } int main(void) { char matriz [13][10]={ {0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,0,0,0}, {0,0,1,0,0,0,1,0,0,0}, {0,0,1,0,0,0,1,0,0,0}, {1,1,1,0,1,1,1,1,1,0}, {0,1,0,0,1,0,0,0,0,0}, {0,1,1,0,1,1,1,0,0,0}, {0,0,1,0,1,0,0,0,1,0}, {0,0,1,0,0,0,1,1,1,0}, {0,0,1,1,1,1,1,0,0,0}, {0,0,0,0,0,0,1,0,0,0}, {0,0,0,0,0,0,1,1,1,3}, {0,0,0,0,0,0,0,0,0,0},}; int b= 0; int altura = 10; int largura = 13; int p = 0; int o = 0; char **a = malloc(largura * sizeof(char*)); for(int x = 0; x< largura; x++){ a[x] = malloc(altura * sizeof(char)); } for (int i=0; i<13; i++ ){ for (int j=0; j<10; j++ ) { a[i][j]= matriz[i][j]; } } labirinto(4,0,a,largura,altura); return 0; }
  2. Eu tenho que percorrer um labirinto assumindo que todas as bordas são zeros, exceto dois pontos que representam a entrada e a saída do labirinto.Ao percorrer o labirinto eu tenho que marcar como 2 a resposta certa mas meu programa nao consegue, estou guardando as informações em duas pilhas caso nao seja o caminho certo ele desempilha e volta marcando aquele local como -1 o labirinto e esse 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 no caso a saida ficaria assim 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 2 2 1 0 1 1 1 1 1 0 0 2 0 0 1 0 0 0 0 0 0 2 2 0 1 1 1 0 0 0 0 0 2 0 1 0 0 0 1 0 0 0 2 0 0 0 1 1 1 0 0 0 2 2 2 2 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0 0 0 while(x<nLinha && y<nColuna ){ if(nMatriz[x][y+1]==1){ emPilhar(px,x); emPilhar(py,y); y++; nMatriz[x][y]=2; continue; } if(nMatriz[x+1][y]==1){ emPilhar(px,x); emPilhar(py,y); x++; nMatriz[x][y]=2; continue; } if(nMatriz[x-1][y]==1){ emPilhar(px,x); emPilhar(py,y); x--; nMatriz[x][y]=2; continue; } if(nMatriz[x][y-1]==1){ emPilhar(px,x); emPilhar(py,y); y--; nMatriz[x][y]=2; continue; } else{ nMatriz[x][y] = -1; nMatriz[desemPilhar(px)][desemPilhar(py)]; continue; } }
  3. Consegui de um jeito melhor file = fopen("Labirinto.txt","rw"); while(fgets(linha, sizeof(linha), file) != NULL) { nLinha++; } nColuna = ((strlen(linha))/2) + 1;
  4. int main(){ FILE *file; char texto; int linhas = 0; file = fopen("Labirinto.txt","rw"); while((texto=fgetc(file))!=EOF){ if(texto == "\n") linhas++; printf("%c",texto); } printf("%d",linhas); return 0; } Pensei em fazer algo assim mas nao consigo comparar a variavel "texto" com o \n
  5. Eu preciso ler uma matriz dentro de um arquivo e passar ela para um vetor , mas eu não sei o seu tamanho , ela é formado por 0 e 1 pensei em ler char a char e depois usar atoi para converter em int e contar os \n para saber o número de linhas e a cada char lido eu armazenar em outra variável para saber o número de colunas ,mas não sei como codar isso Exemplo de arquivo Ai no final eu teria variáveis assim : int nColunas = 10; int nLinhas = 13; int vetor[nLinhas][nColunas] = {Os valores do arquivo}
  6. Gostaria de uma ajuda para reduzir a quantidade de if`s nesse algoritmo, ele serve para detectar componentes conexos explicação de algumas funções, cria_lista()=cria uma lista pop(lista) remove um elemto push(lista) coloca um elemento // considerando que a borda da imagem são zeros // im - imagem original // im_rot - imagem rotulada - inicialmente zerada label = 1; lista_proximos = cria_lista(); Ponto p, p_atual; for i = 1 ate nlinhas-1 { for j = 1 ate ncolunas-1 { // percorre toda a imagem em busca de um pixel foreground (valor 1) p.x = i; p.y = j; if (im(p.x,p.y)==1) and (im_rot(p.x,p.y)==0) { // atribui o label a posição (i,j) im_rot(p.x,p.y) = label; // inclui na lista de busca dos vizinhos lista_proximos.push_back(p); while !vazia(lista_proximos) { // busca o próximo ponto da lista p_atual = pop(lista_proximos); // buscando por pixels na vizinhança do ponto atual que são iguais a 1 // ponto acima p.x = p_atual.x - 1; p.y = p_atual.y; // verifica if o ponto acima não é um e não foi rotulado if (im(p.x, p.y)==1) and (im_rot(p.x,p.y)==0){ // atribui o label a posição atual im_rot(p.x,p.y) = label; // adiciona o ponto na lista para verificar vizinhos posteriormente push(lista_proximos,p); } // ponto abaixo p.x = p_atual.x + 1; p.y = p_atual.y; if (im(p.x, p.y)==1) and (im_rot(p.x,p.y)==0){ // atribui o label a posição atual im_rot(p.x,p.y) = label; // busca o próximo ponto da lista push(lista_proximos,p); } // ponto à esquerda p.x = p_atual.x; p.y = p_atual.y - 1; if (im(p.x, p.y)==1) and (im_rot(p.x,p.y)==0){ im_rot(p.x,p.y) = label; push(lista_proximos,p); } // ponto à direita p.x = p_atual.x; p.y = p_atual.y + 1; if (im(p.x, p.y)==1) and (im_rot(p.x,p.y)==0){ im_rot(p.x,p.y) = label; push(lista_proximos,p); } } // enquanto label = label + 1; } // if } }
  7. @Mauro Britivaldo Bom dia! Na esse não é o problema , usei esse comando para pular o "P2" do começo do arquivo para começar a ler os dados em si, ele lê mas quando chega na matriz logo após o valor máximo eu não consigo ler ele direito, o arquivo é em texto irei editar arquivo para ficar mais claro
  8. Estou tendo problema para ler um arquivo com espaços, eu tenho um arquivo (ex mais em baixo)que a primeira linha eu descarto e começo a ler ela na segunda linha até a quarta logo após começa uma matriz mas não consigo ler ela apropriadamente , ou gera um número aleatório ou simplesmente pega o número pela metade void abrirArquivo(){ char c [100]; int b [3]; int *d; int teste[4]; FILE *file; file =fopen("GIMP.pgm","rt"); if(file == NULL){ printf("Problemas na abertura do arquivo \n"); } fseek(file,2*sizeof(char),SEEK_SET); for(int i = 0; i<2; i++){ fread(c,sizeof(char),3,file); b[i] = atoi(c); } fread(c,sizeof(char),5,file); b[2] = atoi(c); for(int i = 0 ; i<4; i++){ fread(c,sizeof(char),6,file); teste[i]= atoi(c); printf("\n%d",teste[i]); } d = malloc(b[0] * b[1] *(sizeof(int))); free(d); fclose(file); } O Arquivo em si Ç P2 (Eu pulo essa parte) 3 3 (Consigo ler esses dois dados) 255 (Consigo ler) 25 123 (Chega aqui não consigo ler o número inteiro) 255 255 255 255 Resumindo tem um arquivo a primeira linha e o um nome a segunda e o tamanho da matriz e na terceira e o valor maximo que um numero pode tomar e logo após a matriz em si, eu consegui ler até o número máximo mas quando chega na matriz não vai

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!