Red de conocimiento informático - Aprendizaje de código fuente - Curso diseño de estructura de datos, grafo dirigido, maestría en lenguaje C

Curso diseño de estructura de datos, grafo dirigido, maestría en lenguaje C

Compile y confirme:

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

{

from = node[i][0] /* Punto inicial del borde*/

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>}