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