Preguntas sobre estructura de datos.
Supongamos que el gráfico no dirigido G tiene 6 nodos y 9 aristas,... (1) Dibuje la matriz de distancias de adyacencia y la lista de adyacencia de G (2) De acuerdo con la lista de adyacencia, comience desde el vértice 3
#includelt;stdio.hgt;
#includelt;stdlib.hgt;
#includelt;conio.hgt;
# includelt; malloc.hgt;
#define?maxsize?64
#define?TRUE?1
#define?FALSE?0
#define?n?6
#define?e?9
typedef?char?datatype?;
typedef?char?vextype? int?adjtype;
typedef?struct?
{ vextype?vexs[maxsize]; adjtype?arcs[maxsize][maxsize];}gráfico; typedef?struct?
{ tipo de datos?data[maxsize]; int?front,rear;}sequeue
typedef?struct?node?
{ int; ?adjvex; struct?node?*next;
}edgenode;
typedef?struct
{ vextype?vertex?*link;}vexnode;
vexnode?gl[maxsize];
¿gráfico? *ga; secuencia?*Q
gráfico?*CREAGRAPH()
{ int?i,j,k; char?ch; system("cls"); scanf("c",amp;ch); printf("\nIngrese la información del vértice (matriz de adyacencia):? "); for(i=1;ilt;=n;i) scanf("c",amp;ga-gt;vexs[i]); for(i=1;ilt;=n;i) for(j=1; jlt;=n;j)
ga-gt; arcs[i][j]=0; printf("\nIngrese información y peso del nodo:\n"); ; e; k ) {
scanf("dd", amp; i, amp; j // Lee una línea que se convierte en los números de vértice i y j en ambos extremos y los pesos de los bordes).
ga-gt;arcos[i][j]=1;
ga-gt;arcos[j][i]=1;retorno?ga;} p>
ga-gt; arcos[j][i]=1; } return?ga;}
p>
void?PRINT()
{ int?i,j; system("cls"); printf("\nLa matriz de adyacencia correspondiente es:\n\n"); for (i=1;ilt;=n;i) { for(j=1; jlt;=n;j)
printf("5d",ga-gt;arcs[i][j] ); printf("\n"); ¿vacío?CREATADJLIST()
{ int?i,j,k; edgenode?*s; char?ch; system("cls"); printf("Ingrese la información del vértice:? "); ; for(i=1;ilt;=n;i) {? gl[i].vertex=getchar(); gl[i].link=NULL } printf("Ingresar información del nodo de la tabla de borde:\n") ; for(k=1;klt;=e;k) {
? (edgenode?*)malloc(sizeof(edgenode));
s-gt; adjvex=j
s-gt;
? gl[i].link=s;
? gt; adjvex=i;
s-gt; siguiente=gl[j].enlace
? > }}
void?PRINTL()
{ int?i; edgenode?*s; system("cls"); printf("\nLa lista de adyacencia correspondiente es: \ n"); for(i=1;ilt;=n;i) {
s=gl[i].link; printf("3c",gl[i].vertex); < / p>
while(s!=NULL)
{ printf("5d", s-gt; adjvex); s=s-gt;
}
printf("\n"); }}
secuencia?*SETNULL(secuencia?*P)
{ P-gt; ; P-gt; trasero=maxsize-1; retorno?P;}
int?EMPTY(sequeue?*Q)
{ if(Q-gt;trasero== Q -gt; frente) retorno?VERDADERO; si no, retorno?FALSO;}
secuencia?*ENQUEUE(secuencia?*Q, int?k)
{ if(Q-gt; front==(Q-gt;trasero 1)maxsize) { printf("¡La cola está llena!\n"); return?NULL } else { Q-gt;trasero=(Q-gt;trasero 1)maxsize; -gt; datos[Q-gt; trasero]=k; retorno?Q;
}
int?DEQUEUE(secuencia?*Q)
{ if(EMPTY(Q)) { printf("¡La cola está vacía y no se puede quitar de la cola!\n"); return?FALSE } else { Q-gt; front=(Q-gt; front 1)maxsize;
rn?Q-gt;data[Q-gt;front]; retorno?1;
}
void?BFS(int?k)
{ int?i,j; int?visited[maxsize]={0}; printf("\nLa secuencia obtenida después del recorrido en amplitud es:?"); ga-gt; vexs[k]); visitado[k]=TRUE; Q=ENQUEUE(Q,k); while(!EMPTY(Q)) { i=DEQUEUE(Q); =n; j ) if((ga-gt; arcs[i][j]==1)amp; amp; (!visited[j]))
{
printf("3c",ga-gt; vexs[j]);
?visited[j]=TRUE;
?Q=ENQUEUE(Q,j); p>
p>
} } printf("\n\nLa secuencia obtenida después del primer recorrido en profundidad es:?"); p>
{
int?i;
int?visited[maxsize]={0};
edgenode?*p; >
Q =SETNULL(Q);?
printf("\nLa secuencia obtenida después del recorrido en amplitud es:?");
printf("3c", gl[k]. vértice);
visitado[k]=TRUE;
Q=ENQUEUE(Q, k); Q)) p>
{ i=DEQUEUE(Q); p=gl[i].link; while(p!=NULL) {
if(!visited[p-gt] ;adjvex])
{
printf("3c",gl[p-gt;adjvex].vertex);
visitado[p-gt] ;adjvex]=VERDADERO ;
? Q=ENQUEUE(Q, p-gt; adjvex);
}
p=p-gt; ? } } p>
printf("\n\nLa secuencia obtenida después del primer recorrido en profundidad es:?");}
void?
{
int?j;
static?int?visited[maxsize]={0};
printf("3c",ga- gt; vexs[i ]);
visitó[i]=TRUE;
for(j=1;jlt;=n;j)
? if((ga- gt;arcs[i][j]==1)amp;amp;(!visited[j])) DFS?(j);
}
void?DFSL(int?k)
{int?j?*p estadística;
ic?int?visited[maxsize]={0};? printf("3c", gl[k].vertex); visitado[k]=TRUE; j=p-gt; adjvex; si(!visitó[j]) DFSL(j); p=p-gt;
{ int?i,k; int?ch; Q=malloc(tamañode(gráfico)); ga=malloc(tamañode(gráfico)); *******************************************\n\n"); printf("\t1. Recorre el gráfico conectado usando la lista de adyacencia\n"); printf("\t2. Recorre el gráfico conectado usando la matriz de adyacencia\n"); printf(" \n\n********************************************* *****\ n\n"); printf("Ingrese su elección:?"); scanf("d",amp;ch); switch(ch) { case?1:?CREATADJLIST(); p>
PRINTL();
printf("¿Desde qué nodo desea comenzar:?");
scanf("d", amp; k);
BFSL(k);
DFSL(k); romper caso?2:?ga=CREAGRAPH();
PRINT(); p>
printf("¿Desde qué nodo desea comenzar:?");
scanf("d", amp; i
BFS(i) ;
DFS(i); romper; caso?3:salir?(0); : el subíndice comienza en 1 En primer lugar, al ingresar los elementos correspondientes de la matriz, ¿debe ingresarlos en el orden en que ingresó? ¿Ingresa el orden de la tabla en orden inverso? ¿Porque existen requisitos de tamaño para la selección de la mesa?