14.01.2013 Views

Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia

Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia

Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Explicaciones a <strong>los</strong> <strong>problemas</strong> South American Regionals 2008 55<br />

Análisis <strong>de</strong>l Problema K<br />

Uno <strong>de</strong> <strong>los</strong> primeros <strong>problemas</strong> <strong>de</strong> teoria <strong>de</strong> grafos es el <strong>de</strong> <strong>los</strong> puentes königsberg que nos dice<br />

¿Es posible dar un paseo empezando por una cualquiera <strong>de</strong> las cuatro partes <strong>de</strong> tierra firme,<br />

cruzando cada puente una sola vez y volviendo al punto <strong>de</strong> partida?, don<strong>de</strong> la tierra firme<br />

representan <strong>los</strong> nodos y <strong>los</strong> puentes <strong>los</strong> arcos <strong>de</strong>l grafo.<br />

En este problema el zapatero <strong>de</strong>be visitar una cuidad exactamente una vez, este paseo o rrecorrido<br />

es conocido como camino euleriano, para que exista este rrecorrido en un grafo <strong>de</strong>be<br />

cumplirse:<br />

• No <strong>de</strong>ben existir nodos aislados (grafo conexo).<br />

• Si todos <strong>los</strong> nodos <strong>de</strong>l grafo tienen grado par.<br />

• Si tiene a lo mas dos nodos <strong>de</strong> grado impar.<br />

• El grafo <strong>de</strong>be estar totalmente conectado.<br />

En principio es necesario transformar el grafo que se nos proporciona, en uno en don<strong>de</strong> las<br />

confe<strong>de</strong>raciones representan un nodo y una ciudad representa un arco que es la conexión entre<br />

dos confe<strong>de</strong>raciones, si esta ciudad solo pertenece a una confe<strong>de</strong>ración <strong>de</strong>bemos crear un ciclo<br />

es <strong>de</strong>cir duplicar la confe<strong>de</strong>ración o hacer una conexión entre a si mismo.<br />

Tenemos un camino euleriano si todos <strong>los</strong> nodos están conectados, y <strong>de</strong>ben existir a lo mas dos<br />

nodos <strong>de</strong> grado impar.<br />

n_imp = 0;//numero <strong>de</strong> nodos <strong>de</strong> grado impar<br />

for (v = 1; v 2)) break;<br />

}<br />

if (n_imp > 2 || !connected(-1)) res = -1;<br />

Si el grafo tiene grado par, tenemos un camino euleriano y la respuesta sera 0, que es el indice<br />

<strong>de</strong>l nodo inicial.<br />

else if (n_imp == 0) {<br />

if (connected (-1)) res = 1;//res-1 = 0<br />

else res = -1;<br />

}<br />

Si existen nodos <strong>de</strong> grado impar, <strong>de</strong>bemos iniciar nuestro recorrido en cualquiera <strong>de</strong> el<strong>los</strong>, y<br />

terminar el en el otro, si no po<strong>de</strong>mos iniciar en cualquier nodo. El arco que esta conectado a<br />

uno a uno <strong>de</strong> estos nodos con el menor indice es la respuesta, otra cosa que <strong>de</strong>bemos tomar en<br />

cuenta es que el nodo que elegimos al inicio no pue<strong>de</strong> ser un puente en el grafo, a no ser <strong>de</strong> que<br />

sea la única elección, con una simple búsqueda en profundidad es posible encontrar <strong>los</strong> puentes<br />

<strong>de</strong>l grafo.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!