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
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.