Curso de diseño de estructura de datos, gráfico dirigido, para expertos en lenguaje C

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*/

{

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");

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;

}