15
Antonio Canela y Bianca González 2014 EJERCICIOS RESUELTOS Revista de Ejercicios Resueltos, tarea asignada para el 08/07/2014, SAIA A Integrantes: Antonio Canela Bianca González Cátedra: Estructura de datos 2

Revista de Estructura de Datos

Embed Size (px)

DESCRIPTION

Revista para la cátedra de estructura de datos 2, autores: Antonio Canela y Bianca González. Sección: SAIA A

Citation preview

EJERCICIOS RESUELTOS 20

14

Antonio Canela y Bianca

González

Integrantes:Antonio Canela

Bianca GonzálezCátedra:

Estructura de datos 2

Revista de Ejercicios Resueltos, tarea asignada para el 08/07/2014, SAIA A

República Bolivariana de Venezuela

Universidad Fermín Toro

Facultad de Ingeniería

Escuela de Computación

Cabudare, EDO Lara

Integrantes:

Antonio Canela

Bianca González

Cátedra:

Estructura de datos 2

EJERCICIOS RESUELTOS DE

GRAFOS Y ÁRBOLES BINARIOS

Ejercicios Resueltos

1. Sea el grafo no dirigido G de la figura

Solución:

a) Describir G formalmente en términos de su conjunto V de nodos y de su conjunto A de aristas.Conjunto V de nodos:V=[R,F,J,H,T,J,F,L]Conjunto A de aristas:A=[L,F,J,T,H,J,F,R]

b) Encontrar el grado de cada nodo. El grado en V para cada nodo es:[F2,J2,R1,H1,T1,L1]El grado en A para cada nodo es:[L1,F2,J2,T1,H1,R1]

c) Realice el árbol binario.El árbol binario sería el siguiente:V=[R,F,J,H,T,J,F,L] Viéndose de la siguiente forma:

A[L,F,J,T,H,J,F,R]Viéndose de la siguiente forma:

2. Sea el grafo dirigido de la figura

Solución:

a) Describir el grafo formalmente en términos de su conjunto V de nodos y de su conjunto A de aristas.

Para el conjunto V de nodos:V=[M,L,K,M,D,K,T]

Para el conjunto A de aristas:A=[M,L,K,M,D,K,M,D,L,T]

b) Encontrar el grado de entrada y el grado de salida de cada vértice.

Grado de entrada:[M1][D1][K2][L2][T2]

Grado de salida:[M2][D2][K2][L2][T1]

c) Encontrar los caminos simples del vértice M al vértice T.

Siendo el camino más simple aquel que va del vértice [M] al vértice [T], por tanto este sería:[M,L,K,M,D,K,T]

3. Sea el grafo G de la figura

Solución:

a) Encontrar todos los caminos simples del nodo A al nodo F.

El camino más simple del nodo [A] al nodo [F] sería: [A,C,P,S,D,F]

b) Encontrar el camino más corto de C a D.

El camino más corto de [C] a [D] sería: [C,P,S,D]

c) ¿Es un grafo conexo?No, no es un grafo conexo, esto debido a que para ser un grafo conexo cada par de vértices está conectado por un camino; es decir, en el grafo anterior no existe conexión [A a S] ó [P a B] e inclusive de [B a M].

4. Dado el grafo valorado de la figura

Solución:

a) Encontrar la matriz de pesos del grafo Peso de cada arista:A[F,A]=5A[V,A]=8F[W,F]=4L[F,L]=7W[L,W]=9V[F,V]=5

b) Representar el grafo mediante listas de adyacencia, siendo esta:[A,F],[A,V],[A,W],[F,W],[L,V],[W,V],[W,A],[V,W],[V,F],[V,L]

5. Un grafo G consta de los siguientes nodos V={A, B, C, D, E} y la matriz de adyacencia:

Solución:

a) Dibujar el grafo correspondiente. Asumiendo la primera fila como A, la segunda fila como B, la tercera como C, La cuarta como D y la quinta como E. Visualizando la matriz de la siguiente forma:

Siendo el grafo:

b) Representar el grafo mediante listas de adyacencia.

[A,E], [B,D], [D,A],[E,A],[E,D]

c) Realizar el recorrido del grafo en profundidad partiendo del nodo C.

El tiempo sería: 1,2,3,4,5,6,7,8,9,10,11

d) Realizar el recorrido del grafo en anchura partiendo del nodo C.

El recorrido en anchura sería: Distancia

La distancia sería:Para C=1, ABD=2, E=3

6. Un grafo dirigido acíclico (GDA) es un grafo dirigido sin ciclos. Dados los siguientes grafos:

indicar si son GDAs. En caso de no serlo, escribir los ciclos.

Solución:

1. El grafo de la izquierda ubicándolo como el número 1 sería un grafo cíclico, ya que se puede partir desde su vértice inicial y volver a este mismo.

Sus ciclos siendo los siguientes: [A,D,B,F] y [A,W,E,D,B,F]

2. Para el grafo de la derecha, es decir nuestro segundo grafo podríamos decir que es un grafo a-cíclico, debido a que no posee ningún ciclo, es decir, no tiene un camino que vaya desde su inicio y vuelva a este mismo, ya que se encuentra direccionado de tal forma que no permite la realización de un ciclo.

7. El recorrido en preorden de un determinado árbol binario es: GEAIBMCLDFKJH y en inorden IABEGLDCFMKHJ... ·

Solución:

a) Dibujar el árbol binario

El árbol binario sería el siguiente:

Recorrido en preorden: GEAIBMCLDFKJH

Recorrido en inorden: IABEGLDCFMKHJ

b) Dar el recorrido en postordenRecorrido en postorden: IBAEDLFCHJKMG

c) Diseñar una función para dar el recorrido en postorden dado el recorrido en preorden en orden y escribir un programa para comprobar el resultado del apartado anterior.

#include ˂stdio.h˃#include ˂conio.h˃#include ˂stdlib.h˃#include ˂string.h˃char *postorden;char *inorden=”IABEGLDCFMKHJ”;char *preorden=”GEAIBMCLDFKJH”;

void post(char *pre, char *in, char *posto, int n){

Int longizq;If(n!=0){Posto[n-1]=pre[0]:Longizq=strchr(in,pre[0])-in;Post(pre+1, in, posto, longizq);Post(pre+1+longizq, in+1+longizq,posto+longizq,n-1-longizq)}

}int main(int arg, char *argv[]){

Int aux;aux=strlen(preorden);postorden=(char*)malloc(aux*sizeof(char));if (postorden){Printf(“El recorrido en preordn es: %s\n”, preorden);Printf(“El recorrido en inorden es: %s\n”, inorden);Post(preorden, inorden, postorden, aux);Postorden[aux]=’\0’;

Printf(“El recorrido en postorden es:%s\n”,postorden);Free(postorden);}Else{Fprintf(stderr, “Error: no hay memoria\n”);Return 1;}

Return 0;}

8. Implementar una función no recursiva para recorrer un árbol binario en orden.

Solución:

Recorrido en inorden:

#include < pilas.h>#include < arbolesB.h>

void inordenNR(ArbolB T,void (* EscribirElemento)(void *),int tamano){ NodoB nodoAct,aux; void *et; Pila p; int fin; int faltaHD; //*Indica si falta el hijo derecho*//

p=CrearPila(sizeof(NodoB)); et=malloc(tamano); if(!et){ //*Error: Sin memoria*// }

aux=NODOB_NULO; Push(&aux,p); nodoAct=RaizB(T); fin=0; while(!fin){ while(nodoAct!=NODOB_NULO){ Push(&nodoAct,p); nodoAct=HijoIzqdaB(nodoAct,T); }

Tope(&nodoAct,p); Pop(p); if (nodoAct!=NODOB_NULO){ EtiquetaArbolB(et,nodoAct,T); (*EscribirElemento)(et); nodoAct=HijoDrchaB(nodoAct,T); } else fin=1; }

free(et); DestruirPila(p);}

9. Escribir una función recursiva que encuentre el número de nodos de un árbol binario.

Solución:

int numero(NodoB n,ArbolB T){ if (n==NODOB_NULO) return 0; else return 1+numero(HijoIzqdaB(n,T),T)+numero(HijoDrchaB(n,T),T);}

10. Escribir una función recursiva que encuentre la altura de un árbol binario.

Solución:

#define MAXIMO(a,b) ((a) < (b)?(b):(a))

int altura(NodoN n,ArbolB T){

if(n==NODOB_NULO) return -1; else return 1+MAXIMO(altura(HijoIzqdaB(n,T),T),altura(HijoDrchaB(n,T),T));}