Colección de citas famosas - Slogan de motivación - ¿Qué recorrido se utiliza en lenguaje C para volver al punto de partida después de atravesar todos los vértices?

¿Qué recorrido se utiliza en lenguaje C para volver al punto de partida después de atravesar todos los vértices?

Puede utilizar el método de recorrido en profundidad primero para regresar al punto inicial. El recorrido en profundidad en realidad se define mediante un método recursivo, por lo que (simple) el vértice desde el que comience terminará en el punto fijo hasta el punto. final del recorrido.

El siguiente es un ejemplo que escribí sobre la creación de un gráfico a partir de un archivo y el recorrido en profundidad de la salida, pero antes de ejecutarlo, primero debe crear un archivo de texto .txt del gráfico en el proyecto, aquí está "data.txt". (porque si no usa un archivo, cada vez debe volver a ingresar la imagen antes de ejecutar, lo cual es muy problemático)

#include?lt;stdio.hgt;

#include?lt; malloc.hgt;

#include?lt;string.hgt;

#define?max_vertex_num?50

typedef?char ?vertextype[10];

typedef?struct?arcnode {

int?adjvex;

struct?arcnode?*next;

}arcnode;

typedef?struct?vexnode{

vertextype?data;

arcnode?*firstarc;

}vexnode, adjlist[max_vertex_num];

typedef?struct{

p>

adjlist?vertices;

int?vertexnum,edgenum;

}adjlistgraph;

int?visited[max_vertex_num];

int?locatevertex(adjlistgraph?G,vertextype?v);//Encuentra el número de serie correspondiente al nombre del vértice

void?creatgraph(adjlistgraph?amp;G);//Crear un gráfico

p>

void?show_vertex(adjlistgraph?G); //Mostrar información sobre todos los vértices en el Graph

void?visit(adjlistgraph?G); //Recorre el gráfico

void?DFS(adjlistgraph?G, int?v); //Recorrido en profundidad

p>

int?main()

{

adjlistgraph?G;

creatgraph(G);

show_vertex( G); //Muestra información de vértices en el gráfico

printf("\n");

printf("\n"); "Recorrido en profundidad del gráfico: \n");

visit(G

return?0;

}

<); p>int?locatevertex(adjlistgraph?G, vertextype?v)

{

int

for(i=0;ilt;=G .vertexnum;i)

if(strcmp(v,G.vertices[i].data)==0)

p>

return?i;

return?-1;

}

void?creatgraph(adjlistgraph?amp;G)

{

ARCHIVO?*fp ;

int?i, j;

vertextype?va,

fp =fopen("datos;

.txt", "r");

fscanf(fp, "d", amp; G.vertexnum); //Ingrese el número de vértices del archivo

for( i =0; ilt; G.vertexnum; i )//Inicializa la información del vértice del archivo

{

fscanf(fp, "s", amp; G.vertices[i ] .data);

G.vertices[i].firstarc=NULL;

}

fscanf(fp, "d", amp; G. edgenum ); //Ingrese el número de borde del archivo

for(j=0;jlt;G.edgenum;j)//Inicialice el borde del archivo

{

fscanf(fp, "ss", amp; va, amp; vb);

int?n=locatevertex(G, va, amp; vb); m=locatevertex (G, vb);

arcnode?*p=(arcnode*)malloc(sizeof(arcnode)); //n---gt; -gt; adjvex=m;

p-gt; siguiente=G.vertices[n].firstarc;

G.vertices[n].firstarc=p;

arcnode?*q=(arcnode*)malloc(sizeof(arcnode));//m---gt;n

q-gt;adjvex=n;

q -gt; next=G.vertices[m].firstarc;

G.vertices[m].firstarc=q;

}

fclose(fp );

}

void?show_vertex(adjlistgraph?G)

{

int?k;

printf("Los vértices del gráfico son:\n");

for(k=0;klt;G.vertexnum;k)

{

printf("-15s", G.vertices[k].data);

if((k 1)5==0)

printf(" \n") ;

}

}

void?visita(adjlistgraph?G)

{

for(int ?i=0; ilt; G.vertexnum; i )

visitó[i]=0;

for (int?v=0; vlt; G. vertexnum; v )

if(visitado[v]==0)

{

DFS(G, v)

}

printf("\n");

}

void?DFS(adjlistgraph?G, int?v)

{

visitó[v]=1;

printf("s-gt;", G.vertices[v].data);

for( nodo de arco?*p =G.vertic

es[v].firstarc;p;p=p-gt;next)

if(visitado[p-gt;adjvex]==0)

DFS(G,p -gt; adjvex);

}

Simplemente escriba algunos puntos y aristas y se ejecutará:

Por ejemplo, escriba data.txt Introduzca:

4

Pekín

Shanghai

Hangzhou

Kunming

5

¿Pekín? ¿Shanghai?

¿Hangzhou?

¿Pekín Kunming?

El resultado después de ejecutar es: