Curso diseño de estructura de datos, grafo dirigido, maestría en lenguaje C
/* Recorrido en profundidad del gráfico*/
#include lt;stdlib.hgt
#include lt;stdio.hgt;
#include lt;conio.hgt;
struct node /* Definición de estructura de vértice del gráfico */
{
int vertex ; /* Información de datos del vértice*/
struct node *nextnode /* Indicador que apunta al siguiente vértice*/
}
typedef struct node * gráfico /* El nuevo estado de la estructura gráfico*/
struct node head[9] /* Cambia la matriz de vértices del gráfico al tamaño real*/
int visitado[; 9]; /* Recorre la matriz de etiquetas y cámbiala al tamaño de matriz real*/
/************************ * Crear una lista de adyacencia basada en la información existente*** *****************/
void creategraph(int node[20][2], int num)/* num se refiere al número de aristas del gráfico */
{
graph newnode
int from /* Punto inicial del borde; */
int to; /* Borde El punto final */
int i
for ( i = 0; i lt; num; i ) /* Leer la información lateral e insertarla en la lista de adyacencia */ p>
{
from = node[i][0] /* Punto inicial del borde*/ ; p>
to = node[i][1]; /* Borde El punto final*/
/* Crea un nuevo vértice*/
newnode = (gráfico) malloc(sizeof(struct node));
newnode-gt; vertex = to /* Crear contenido de vértice*/
nextnode = NULL; valor inicial del indicador*/
ptr = amp (head[ from] /* Posición del vértice*/
while (ptr- gt; nextnode! = NULL ) /* Recorrer hasta el final de la lista enlazada*/
ptr = ptr-gt; nextnode /* Siguiente vértice*/
ptr-gt; ; /* Insertar nodo*/
}
}
/****************** *** ****** Búsqueda en profundidad del gráfico************************/
void dfs(int current)
{
gráfico ptr;
visitado[actual] = 1; /* Registro atravesado*/
printf("vértice[d]\n ", actual); /* Genera el valor del vértice atravesado*/
ptr = he
ad[current].nextnode; /*Posición del vértice*/
while ( ptr != NULL ) /* Recorrer hasta el final de la lista vinculada*/
{
if (visitado[ptr-gt;vertex] == 0 ) /* Como si nunca hubiera sido visitado*/
dfs(ptr-gt;vertex); /* Recorrido recursivo llamado*/
ptr = ptr-gt.nextnode; /* siguiente vértice*/
}
}
/***** * ************************** Programa principal********************** ** *******/
int main()
{
gráfico ptr /* matriz de bordes*/
int node[20][2] = { {1, 2}, {2, 1}, /* Reemplace con su propio valor de vértice y cambie el rango de i en el siguiente bucle for en consecuencia*/
{1, 3}, {3, 1},
{1, 4}, {4, 1}, <
{2, 5}, { 5, 2 },
{2, 6}, {6, 2},
{3, 7}, {7, 3},
{4, 7}, {4, 4},
{5, 8}, {8, 5},
{6, 7}, {7, 6},
{7, 8}, {8, 7}.
int i
sistema("cls"); for ( i = 1; i lt; = 8; i) /* Inicialización de matriz de vértices*/
{
head[i].nextnode = NULL /* El puntero es nulo; */
visited[i] = 0; /* Establecer indicador transversal inicial*/
}
creategraph(node, 20); list*/
printf("El contenido de la ADlist de gragh es:\n"
for ( i = 1; i lt; = 8; i)
);{
printf("vertexd -gt;", head[i].vertex); /* Valor de vértice*/
ptr = head[i].nextnode; /*Posición del vértice*/
while ( ptr ! = NULL ) /*Recorrer hasta el final de la lista enlazada*/
{
printf(" d ",ptr-gt ; vértice); /*Imprimir el contenido del vértice*/
ptr = ptr-gt; nextnode; /*Siguiente vértice*/
}
printf ("\n"); /* Avance de línea*/
}
printf("\nEl final del dfs es:\n") ;
dfs(1); /* impresión del proceso transversal */
printf("\n");
d */
puts(" Presione cualquier tecla para salir...");
getch();
return 0; p>}