Está en la página 1de 2

Mie 05 de julio de 2017

PRIMER PARCIAL
INF310 SX‒ Estructuras de Datos II. Gestión 1-2017.
Subgrupo: M-Z

Árbol M-Vías

1. En la class ArbolM, escriba la función


public String ubicacion(int x)

la cual devuelva la cadena de ubicación del data x en el Arbol. Si x no existe, devuelve la cadena vacía.

Definimos ubicación de un data x en un árbol M-Vías, a aquel String compuesto por los char’s “bb…b@d”, donde cada b es un bit que
representan los hijos por donde descendemos, desde la raíz, para encontrar a x (para los hijos pares b=0, para los impares b=1).
Finalmente d es el número de data que x ocupa en su NodoM (e.g. Si el nodo N contiene a x y N.getData(3)==x, entonces d=3).

Por ejemplo:

Nota: Los unos y ceros mostrados en los punteros hijo, no existen, solo sirven de referencia. A los hijos 1 y 3 (impares) le escribimos 1, mientras que a
los hijos 2 y 4 (pares) le anotamos un 0.

ubicacion(100) = “@1” //Porque no recorremos ningún hijo y el 100 se encuentra en el Data 1


ubicacion(300) = “@3” //Porque no recorremos ningún hijo y el 300 se encuentra en el Data 3
ubicacion(70) =”11@2“ //Recorremos hijo1: 1, hijo3: 1, y el 70 se encuentra en el Data 2 de su nodo.
ubicacion(112) =”010@1“ //Recorremos hijo2: 0, hijo1: 1, hijo2: 0, y el 112 se encuentra en el Data 1 de su nodo.
ubicacion(500) =” “ //Devuelve la cadena vacía, porque el 500 no existe.

Grafos Dirigidos y con Peso (Taggraph)

2. En la class Grafo, escriba usted un DFS especial, con la función


public double dfsCheap(int a)

la cual partiendo de un vértice, continúa con el vértice adyacente (no-marcado) cuya arista tenga el menor costo. Finalmente,
devuelve el costo total recorrido.
También, esta función debe mostrar en consola (System.out.println) los vértices que va visitando. Por ejemplo:
Mie 05 de julio de 2017

35 dfsCheap(0)=55 //Consola: 0, 3, 4, 2
dfsCheap(1)=62 //Consola: 1, 6, 2
25 dfsCheap(2)=0 //Consola: 2
2 12 dfsCheap(3)=40 //Consola: 3, 4, 0, 2
0
10 7
6 dfsCheap(4)=107 //Consola: 4, 0, 3, 1, 6, 2
15
4 30 dfsCheap(5)=50 //Consola: 5, 3, 4, 0, 2
25 3 10 dfsCheap(6)=5 //Consola: 6, 1
50 5 dfsCheap(7)=0 //Consola: 7
20
5 10 8 dfsCheap(8)=10 //Consola: 8, 7
20 1

Mostrando algunas trayectorias:


15 5 35
dfsCheap(0)=55 : 0 ---> 3 ---> 4 ---> 2 (del vértice 4, no se continuó en el vértice 0, porque el 0 estaba marcado).

50 12
dfsCheap (1)=62 : 1 ---> 6 ---> 2 (del vértice 6, no se continuó en el vértice 1, porque el 1 estaba marcado).

5 10 25
dfsCheap (3)=40: 3 ---> 4 ---> 0 --> 2 (del vértice 0, no se continuó en el vértice 3, porque el 3 estaba marcado).

10 15 20 50 12
dfsCheap (4)=107 : 4 ---> 0 ---> 3 --> 1 --> 6 --> 2 (del 3 al 4 no se continuó, porque el 4 estaba marcado).

10 5 10 25
dfsCheap (5)=50 : 5 ---> 3 ---> 4 --> 0 --> 2 (del 0 al 3 no se continuó, porque el 3 estaba marcado).

Tip: Cada vez que usted visite un vértice u, márquelo usando el método private marcar(u)
Recuerde: Un DFS jamás visita un vértice más de una vez (por eso se usa el marcado de vértices).

También podría gustarte