revista de estructura de datos
DESCRIPTION
Revista para la cátedra de estructura de datos 2, autores: Antonio Canela y Bianca González. Sección: SAIA ATRANSCRIPT
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));}