Ir ao conteúdo
  • Cadastre-se

Dúvida em código


rennanbighi

Posts recomendados

Tenho que fazer um trabalho que lê um grafo de entrada, e o percorre com uma busca em profundidade (dfs). A entrada é um arquivo texto contendo a primeira linha corresponde ao numero de vertices e de arestas, e é seguida de uma linha por vertice, contendo a lista de adjacencias do mesmo. A Saida é no formato: numero do vertice - prof. entrada/prof. saida. Fiz o código mas, apesar de compilar, ele não está retornando nada. Gostaria que alguém pudesse dar uma ajuda... Acredito que meu erro está sendo ao ler a lista de adjacencia do arquivo...

Entrada:

8 9

2 7

1 4 6

5 8

2 6 7

3 8

2 4

1 4

3 5

Código:

#include <stdio.h>

#define MAXV 10 //número máximo de vértices

int G[MAXV][MAXV]; //grafo representadp por lista de adjacencia

int A[MAXV][MAXV]; //grafo representado por matriz de adjacência

int visitado[MAXV]; //se for 1 vértice já visitado, caso contrário 0. Começa com 0 em todas as posições

int n; //número de vértices neste grafo

int *contador; //contador para a profundidade do grafo

void dfs(int origem){

int p=1, i;

int v = origem; //vértice atual

visitado[v] = 1; //origem está visitada

contador[v] = 1; // Contador de profundidade

for(i = 0; i < n; ++i)

{ //rodar todas as possíveis arestas de v

if (G[v] == 1 && visitado == 0) //existe aresta e ainda não visitou

{

//Faz aqui o que quiser antes da chamada recursiva...

dfs(i); //visita esse vértice

contador[v] += 1;

}

}

}

void dfsDigrafo(){

int v;

for(v = 0; v < n; ++v) //ninguém foi visitado

visitado[v] = 0;

for(v = 0; v < n; ++v){ //roda todos os vértices

if( visitado[v] == 0 ){ //se ainda não foi visitado

dfs(v); //faz a busca para esse vértice

}

}

}

int main (int argc, char *argv[])

{

srand(time(NULL));

int i=0, j=0, k=1;

int x, y;

int v;

FILE *fp;

fp = fopen("org2.txt", "r");

while(!feof(fp)) {

while(!'\n')

{

fscanf(fp, "%d", &G[x][y++]);

fclose(fp);

}

fscanf(fp, "%d", &G[x++][y]);

}

y=1;

x=1;

for (i=0; i<n+1; ++i) //Preenche a matriz de adjacencia

{

for(j=0; j<n+1; ++j)

{

j = G[x][y];

if (j != 0)

A[j] = 1;

else

A[j] = 0;

y++;

}

x++;

}

dfsDigrafo(); // Chama função que vai ler matriz de adjacencia e retornar a profundidade dos vertices

for (v=0; v<n; ++v) // Imprime o numero do vertice e sua profundidade

{

printf("%d" "%d", v, contador[v]);

}

}

Link para o comentário
Compartilhar em outros sites


fp = fopen("org2.txt", "r");
while(!feof(fp)) {
while(!'\n') // --------- 1 -----------
{
fscanf(fp, "%d", &G[x][y++]);
fclose(fp); // --------- 2 -----------
}
fscanf(fp, "%d", &G[x++][y]); // --------- 3 ----------
}

1 ---> nunca vai entrar nesse while, porque a condição tá sempre falsa

2 ---> fechando o arquivo depois de ler apenas o primeiro numero

3 ---> tentando ler de um arquivo fechado

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!