Sei sulla pagina 1di 4

INF-134: Estructuras de Datos

Tarea 3: Pilas, colas y listas


John Rodrı́guez Fabrizio Ogalde
jirodrig@alumnos.inf.utfsm.cl fogalde@alumnos.inf.utfsm.cl
Sebastián Bórquez Hubert Hoffmann
sborquez@alumnos.inf.utfsm.cl hoffmann@inf.utfsm.cl

1. Instrucciones
Para la presente tarea deberán resolver los siguientes problemas:

1.1. El detective y el asesino


El ayudante John a decido tomar un nuevo rumbo y convertirse en detective. Para su primer
caso, tendrá que descubrir quién fue el culpable de un asesinato. Este último tuvo lugar en una
fiesta, donde todos estaban reunidos en el salón principal a la hora de la muerte, excepto 2 perso-
nas: la victima y el asesino. Para descubrir quién cometió el crimen, el detective Rodrı́guez deberá
preguntarle a las personas que estuvieron en la fiesta a quiénes vieron en el salón a la hora del
asesinato. John piensa que el asesino será aquel que nadie vio en el salón a la hora de la muerte
y aquel que vio a todos en el salón a la hora de la muerte.

Las preguntas que puede hacer el detective son de la forma: ¿La persona 1 vio a la persona 2?
Como el detective tiene mucho trabajo como para averiguar quién fue el culpable, le ha pedido a
los alumnos de INF-134 que lo ayuden, realizando un programa que le diga quién es el culpable
en el menor número de preguntas posibles.

1.1.1. Input
Al ejecutar el programa, se ingresará n, que es el número de personas en la fiesta.
Luego, se ingresarán p0 , p1 , . . . , pn−1 , que corresponden a los nombres de las personas.
Finalmente, se deberá ingresar por cada persona pi , un número que indique si ha visto a la
persona pj : se ingresa 1 si la ha visto y 0 si no la ha visto (matriz de dimensiones n × n).

1
1.1.2. Output
El nombre del culpable.

El número mı́nimo de preguntas.

1.1.3. Consideraciones
Deberán utilizar pilas para resolver este problema.

Esta prohibido importar las pilas desde una librerı́a: deberán programarlas y dejarlas en un
archivo aparte (por ejemplo, pilas.cpp).

No habrán mas de 1000 personas en la fiesta.

Siempre hay una persona que dice haber visto a todos y que nadie lo vio (siempre se
encuentra al culpable).

1.1.4. Ejemplo I/O


Input en color azul y output en rosado

$ ./tarea3-1
3
Seba Hoffman Fabrizio
1 1 1
0 1 0
0 0 1
Seba 2
$

En este ejemplo, tenemos a 3 personas en la fiesta (aparte del asesinado). El culpable es el


Seba, pues nadie lo vio en el salón y el dijo haber visto a todos los demás en el. El mı́nimo de
preguntas que pueden hacerse para saber que él fue el asesino es de 2. Estas 2 preguntas pueden
ser:

¿Fabrizio vio a Hoffmann en el salón? Según la matriz no lo vio, por lo que Hoffmann podrı́a
ser el asesino, y Fabrizio queda descartado (se asume que el asesino dirá que vio a todos).

¿Hoffmann vio al Seba en el salón? Según la matriz, Hoffmann no vio al Seba en el salón,
por lo que el Seba es un posible culpable y Hoffmann queda descartado.

Como ya descartamos a 2, el Seba es el culpable, lo cual es correcto pues nadie lo vio y el


dijo haber visto a todos.

2
1.2. Fila del almuerzo simulator
Se deberá implementar un simulador de la fila del almuerzo del casino con los siguientes
comandos:

entra <persona>: La <persona> entra a la fila.

avanza: La primera persona en la fila entra a almorzar.

se va <persona>: La <persona> se aburre de esperar y se va a comer al Nony.

se cola <persona1> con <persona2>: La <persona1> descaradamente se cola detrás


de la <persona2>.

sneaky <persona>: La persona sin ser vista por nadie se pone al principio de la fila.

size: muestra el número de personas en la fila.

print: imprime el nombre de todas las personas en la fila en orden (desde el primero en la
fila hasta el último).

son las 2: todas las personas se van a clase, y se termina la ejecución del problema.

1.2.1. Consideraciones
Las entradas siempre serán correctas.

No hay máximo de personas que puede tener la fila.

Deberán usar listas y/o colas para resolver este problema.

Esta prohibido importar las listas/colas de alguna librerı́a. Si las usarán deberán programarlas
en archivos aparte (por ejemplo, cola.cpp y listas.cpp).

1.2.2. Ejemplo I/O


Input en color azul y output en rosado

$ ./tarea3-2
entra Fabrizio
entra Hoffmann
entra Horst
entra Juana
sneaky John
se cola Seba con John
print
John
Seba
Fabrizio

3
Hoffmann
Horst
Juana
se va Horst
avanza
avanza
size
3
print
Fabrizio
Hoffmann
Juana
son las 2
$

2. Consideraciones generales
Toda memoria pedida de forma dinámica deberá ser liberada. El no cumplir con esto conlleva
un descuento de 20 puntos.

Para esta tarea, al hacer make se deberán crear 2 ejecutables: tarea3-1 y tarea3-2, los
cuales corresponden a las soluciones de los problemas 1 y 2 respectivamente.

3. Bonus!
+10 si realizan el problema 2 solo con la implementación básica de colas vista en clase.

+10 si realizan el problema 2 solo con listas enlazadas por punteros.

4. Entrega
La fecha lı́mite de entrega es el Viernes 27 de Abril a las 23:55.

Lea el reglamento y use los formatos de entrega establecidos para evitar descuentos.

Potrebbero piacerti anche