Ir ao conteúdo
  • Cadastre-se

Juliano Balcante Pereira

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Tudo que Juliano Balcante Pereira postou

  1. Tentei colocar gets() dentro de um for(i=0;i<4;i++) e de um for(j=0;j<3;j++), porém quando está dentro do loop acaba finalizando o programa.
  2. Entendi, mas o que while(1) ou como está lá, while(; faz? Fica no loop enquanto o quê? E acho que escolheram 0x3f ou ? apenas para preencher o array, funcionando apenas como um marcador inicial...
  3. Estou estudando grafos para a prova da OBI e decidi estudar os códigos e a lógica através de códigos já pronto; O problema a ser resolvido está no seguinte endereço: http://olimpiada.ic.unicamp.br/pratique/programacao/nivel2/2009f1p2_pontes O código é esse (solução proposta pela própria OBI): /* Solucao para o problema "Caminho das Pontes" da OBI 2009 por: Igor Ribeiro de Assis */#include <stdio.h>#include <string.h> /* memset() */#define MAXN 1010/* matriz de adjacencias */int A[MAXN][MAXN], visitado[MAXN], dis[MAXN];int n, m;int dijkstra() { int i; memset(dis, 0x3f, sizeof(dis)); /* distancia inicial infinita */ memset(visitado, 0, sizeof(visitado)); dis[0] = 0; for (; { int no = -1; for (i = 0; i < n; i++) if (!visitado[i] && (no == -1 || dis[i] < dis[no])) no = i; if (no == -1) break; visitado[no] = 1; for (i = 0; i < n; i++) if (dis[no] + A[no][i] < dis[i]) dis[i] = dis[no] + A[no][i]; } return dis[n-1];}int main() { int i; int s, t, b; scanf("%d%d", &n, &m); n += 2; /* imagina os as bordas como pilares */ memset(A, 0x3f, sizeof(A)); /* numero de buracos infinito */ for (i = 0; i < m; i++) { scanf("%d%d%d", &s, &t, &; A[s][t] = A[t][s] = b; } printf("%d\n", dijkstra()); return 0;} O que entendi desse código foi: O grafo está sendo representado por matriz de adjacência; Como o grafo é ponderado, para identificar os arcos está sendo utilizado o próprio peso da aresta; Foi criado um vetor para a distância mínima; Foi criado um vetor para marcar as visitadas ( não sei como); A saída da função dijkstra() é a distância mínima percorrida, no caso a quantidade mínima de buracos; A função memset() preenche um array com determinado valor; Mas não entendi poruqe preenche o vetor dis[] com 0x3f. Tinha pesquisado e descobri que é 63 em número hexadecimal, mas por que 63 e por que em número hexadecimal? O que significa os ';;' em "for (; {"? Vocês poderiam me descrver como funciona a lógica dentro do for(;{}? Quando pesquisei sobre grafos não entendi como funciona aqueles visitados e não visitados...

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!