Autor Tema: Ayuda con un ejercicio de programación

0 Usuarios y 1 Visitante están viendo este tema.

04 Septiembre, 2012, 06:26 am
Leído 3827 veces

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,447
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Necesitaría alguna idea para el ejercicio 3, en particular para esta función:

ListaEnteros* zonasExclusivas(Ciudad* d, int idZona);

Adjunto el pdf donde está todo explicado, transcribirlo sería muy extenso. Lamentablemente todavía no nos han proporcionado los archivos Ciudad.h y Zona.h por lo que desconocemos las operaciones de estos TAD's. Al parecer quieren que ideemos una solución pero a alto nivel, sin entrar en los detalles propios de la implementación.

Muchas gracias.
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print

05 Septiembre, 2012, 04:54 am
Respuesta #1

Phicar

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 513
  • Karma: +1/-0
  • Sexo: Masculino
    • redinfocol.org
Hola PabloN...Pues yo diría que es es un grafo, no?

Porque te dicen que las zonas se relacionan por ser límite una de la otra. Así que lo que tú buscas es el camino más corto entre unos nodos destacados(los que tienen envíos) y la zona del cliente.

Ahora, para las zonas de influencia de un centro pues sería como los vertices adyacentes al centro de envío.

Ahora, las zonas exclusivas pues tendría que ser un pedazo de grafo desconectado o que la zona de influencia no esté intersectada con la zona de influencia de otro centro de envío.

Pues no sé qué te parece verlo así? Se me hace que es la manera más sencilla de trabajarlo.
redinfocol.org

13 Septiembre, 2012, 07:59 pm
Respuesta #2

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,447
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Hola Phicar

Disculpa que haya tardado tanto en contestar.

Hola PabloN...Pues yo diría que es es un grafo, no?

Si, el tipo ciudad es un grafo. Lo implementé usando listas de adyacencia.

Para el primer procedimiento, es decir Camino* CentroEnvioMasCercano(Ciudad* d, int idZona, int n), la idea es hacer una búsqueda BFS partiendo del nodo idZona y de alguna manera ir guardando el recorrido que hago en alguna estructura auxiliar. Porque el problema está en que una vez que llego al nodo que tiene centro de envío (que tiene que ser el más cercano posible al de partida), tengo que ser capaz de reconstruir el camino que hice para retornarlo como solución. Mi idea fue generarme un vector con tantos nodos como tiene el grafo, donde en la celda i guardo el entero j si llego al nodo i desde el nodo j (la primera vez). Entonces a partir de este vector (donde guardo el "predecesor" inmediato), puedo reconstruir fácilmente el camino que hice para llegar al nodo con centro de envío. ¿Se te ocurre alguna idea mejor?

El segundo procedimiento es fácil pues sólo hay que hacer una recorrida BFS contando los niveles a partir del nodo semilla e ir guardando todos los nodos en la lista. El principal problema es cómo determinar cuando me excedo de distancia n (porque no basta sólo con un contador), pero creo que ya lo tengo solucionado.

El procedimiento que me genera problemas sigue siendo el tercero. No veo bien como encararlo. ¿Alguna idea?

Muchas gracias  ;)
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print

13 Septiembre, 2012, 08:51 pm
Respuesta #3

Phicar

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 513
  • Karma: +1/-0
  • Sexo: Masculino
    • redinfocol.org
Hola, no te preocupes por la tardanza..:P

El primero, pues sí, por el momento yo tampoco veo otra solución(lo que haces es lo que usualmente se hace en dijkstra...o así recuerdo :P).

El segundo me parece que es muchísimo más fácil Contar y agrupar los nodos con un DFS que con un BFS..con el DFS tienes el conteo fácil por la recursión.

Para el tercero...me quedé pensando....porque pues si haces un dfs y controlas que no pases por un centro de envío tendrías las zonas conectadas que están en una relación de cobertura con el centro de envío al cual le vas a calcular las zonas exclusivas. El problema es que puedes entrar por otro lado.
Iterar sobre todas las zonas sería muy chambón :P...No sé, si se me ocurre algo te digo.
redinfocol.org

17 Septiembre, 2012, 11:24 pm
Respuesta #4

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,447
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Muchas gracias Phicar. Por suerte lo pude solucionar.

Saludos
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print