UEA: Diseño de Algoritmos
Trimestre: 2007 Invierno
Entrega: 23 de marzo de 2007 a las 10pm

Esta tarea consiste en programar dos heurísticas para una variante del problema del agente viajero: Sea G = (V, E) una gráfica donde cada arista e une a dos vértices u y v y tiene un costo positivo c. Se desea encontrar un camino cerrado que pase por todos los vértices de G y que tenga costo tan económico como sea posible. En este caso se permite pasar tantas veces como se desee por cualquier vértice o arista. El costo de un camino cerrado es la suma de los costos de las aristas por las que se pase (considerando el número de veces que se pase por cada arista). Por ejemplo, si la gráfica G tiene 4 vértices (u, v, x, z) y 5 aristas (uv, vx, xz, zv, zu) con costos (3, 1, 4, 1, 5) respectivamente, entonces dos posibles soluciones son u-v-x-z-u con costo 3+1+4+5 = 13 y u-v-x-v-z-v-u con costo 3+1+1+1+1+3 = 10. Para los dos programas de abajo, la entrada será un número entero V (el número de vértices) seguido de un número entero E (el número de aristas) seguido de E renglones, cada uno con tres números enteros positivos A, B, C con 1 <= A <= V, 1 <= B <= V, A y B distintos, que representan una arista del vértice A al vértice B con costo C. La salida será un número entero N seguido de un entero M seguido de un renglón con N enteros A1, A2, ..., AN de modo que M es el costo del camino A1-A2-...-AN-A1. Puede suponer que 2 <= V <= 100 y que siempre habrá solución. Para nuestro ejemplo, una entrada y dos salidas posibles aparecen en la siguiente tabla:

Entrada
Algunas salidas posibles
4 5
1 2 3
2 3 1
3 4 4
4 2 1
4 1 5
4 13
1 2 3 4

6 10
1 2 3 2 4 2

Problema 1: Escriba un programa llamado cercano basado en la siguiente heurística: Comience el camino en el vértice 1 y a cada paso vaya al vértice más cercano al que se encuentre y que no haya sido visitado todavía. Al final regrese al vértice 1. En cada uno de estos pasos debe usar el camino más corto posible. En caso de haber empates, escoja de forma arbitraria. Observe que todos los vértices por los que vaya pasando ya han sido visitados. En nuestro ejemplo el camino comenzaría en 1, seguiría al 2, después podría ir al 3 o al 4 (digamos al 4), después tendría que ir al 3 y de allí regresar al 1 pasando por el 2, de modo que el camino sería 1-2-4-3-2-1 y la salida sería 5 12 seguida de 1 2 4 3 2.

Problema 2: Escriba un programa llamado lejano basado en la siguiente heurística: Comience el camino en el vértice 1 y a cada paso vaya al vértice más lejano al que se encuentre y que no haya sido visitado todavía. Al final regrese al vértice 1. En cada uno de estos pasos debe usar el camino más corto posible. En caso de haber empates, escoja de forma arbitraria. Observe que todos los vértices por los que vaya pasando ya han sido visitados. En nuestro ejemplo el camino comenzaría en 1, después podría seguir al 3 o al 4 (digamos al 3) pasando por el 2, después tendría que ir al 4 pasando por el 2 y de allí regresar al 1 pasando por el 2, de modo que el camino sería 1-2-3-2-4-2-1.