Compilado y confirmado:
/* Recorrido en profundidad del gráfico*/
#include lt; # include lt; stdio.hgt;
#include lt; conio.hgt;
struct node /* definición de estructura de vértice del gráfico*/
{ p >
int vertex; /* Información de datos del vértice*/
struct node *nextnode /* Puntero al siguiente vértice*/
}; p>typedef struct node *graph; /* El nuevo tipo de estructura del gráfico*/
struct node head[9] /* La matriz de vértices del gráfico se cambia al tamaño real*/
int visitado[9] /* Recorre la matriz de etiquetas y cámbiala al tamaño de matriz real*/
/**************** ****Según la información existente para crear una tabla de adyacencia**********************/
void creategraph(int node[20 ][2], int num)/*num Se refiere al número de aristas en el gráfico*/
{
grafo newnode /*Definición de puntero a nuevo nodo*/
graph ptr;
int from; /* El punto inicial del borde*/
int to /* El punto final del borde*/
int i;
for ( i = 0; i lt; num; i) /* Leer información de borde e insertarla en la lista de adyacencia*/
{
from = node[i][0]; /* El punto inicial del borde*/
to = node[i][1] /* El punto final de el borde*/
/* Crear un nuevo vértice*/
newnode = ( gráfico ) malloc(sizeof(struct node)); ; vertex = to; /* Crear contenido de vértice*/
newnode-gt; nextnode = NULL /* Establecer el valor inicial del indicador*/
ptr = amp; head[from]); /* Posición del vértice*/
mientras (ptr-gt; nextnode != NULL ) /* Recorrer hasta el final de la lista enlazada*/
ptr = ptr-gt; nextnode; /* Siguiente vértice*/
ptr-gt; nextnode = newnode;
/************************ Figura Método de búsqueda en profundidad*************** **********/
void dfs(int current)
{
gráfico ptr
visitado; [actual] = 1; /* El registro ha sido atravesado*/
printf("vertex[d]\n", actual /* Salida de los valores de los vértices atravesados*/
>ptr = head[current].nextnode; /* Posición del vértice*/
while ( ptr != NULL ) /* Recorrer hasta el final de la lista enlazada*/
{
if (visitado[ptr-gt; vertex] == 0 ) /* Si no ha sido atravesado antes*/
dfs(ptr-gt; vertex); Llamada transversal recursiva*/
ptr = ptr-gt; nextnode; /* siguiente vértice*/
}
}
/ **** ***************************** Programa principal*************** ******** ********/
int main()
{
gráfico ptr /* Matriz de borde; */
int node[20][2] = { {1, 2}, {2, 1}, /*Reemplace con su propio valor de vértice y el rango de valores de i en el bucle for a continuación cambiará 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;
for ( i = 1; i lt; = 8; i) /* Inicialización de la matriz de vértices*/
{
head[i] .vertex = i; /* Establecer valor de vértice* /
head[i].nextnode = NULL /* El puntero es nulo*/
visited[i] = 0; /* Establecer el indicador inicial transversal*/
}
creategraph(node, 20); /* Crear lista de adyacencia*/
printf("Contenido de la ADlist de gragh es:\n"); p>
for ( i = 1; i lt; = 8; i )
{
printf("vertexd -gt;", head[i].vertex) ; /* Valor del 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; vertex /* Imprimir el vértice); contenido*/
ptr = ptr-gt; nextnode; /* siguiente vértice*/
}
printf("\n"); */
}
printf("\nEl final del dfs es:\n");
dfs(1); proceso*/
p
rintf("\n"); /* Avance de línea*/
puts(" Presione cualquier tecla para salir...");
devuelve 0;
}