Código de busca em profundidade em grafos
Como solicitado, segue o código que a turma de 2015.2 desenvolveu em sala de aula para o algoritmo de DFS.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int v, a;
int *pai;
int *dist;
int *vist;
int **leitura(int &v, int &a)
{
int orig, dest, peso;
int **G;
// Obtém número de vértices e arestas
scanf("%d", &v);
scanf("%d", &a);
// Declara a matriz de adjacências
G = (int **)malloc(sizeof(int) * v * v);
for (int i = 0; i < v; i++)
G[i] = (int *)malloc(sizeof(int) * v);
// Obtém os dados de cada aresta
for (int i = 0; i < a; i++)
{
scanf("%d %d %d", &orig, &dest, &peso);
G[orig][dest] = G[dest][orig] = peso;
}
return G;
}
void percorrer(int dest)
{
printf("%d",dest);
if(pai[dest] != -1)
{
printf("<-");
percorrer(pai[dest]);
}
}
void dfs(int orig, int **G)
{
vist[orig] = 1;
for(int i = 0; i < v; i++)
{
if(G[orig][i] != 0 && vist[i] != 1)
{
pai[i] = orig;
dist[i] = dist[orig] + G[orig][i];
dfs(i,G);
}
}
}
int main(void)
{
int orig = 0;
int dest = 0;
int **G = leitura(v, a);
pai = (int *) malloc (sizeof (int)*v);
dist = (int *) malloc (sizeof (int)*v);
vist = (int *) malloc (sizeof (int)*v);
for (int i = 0; i < v; i++)
{
pai[i] = -1;
dist[i] = vist[i] = 0;
}
// Imprime a matriz de adjacências
for (int i = 0; i < v; i++)
{
for (int j = 0; j < v; j++)
printf("%3d ", G[i][j]);
printf("\n");
}
printf("\nDigite a origem: ");
scanf("%d",&orig);
printf("Digite o destino: ");
scanf("%d",&dest);
dfs(orig,G);
percorrer(dest);
return 0;
}
Leave a Reply