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 10<br />
Análisis <strong>de</strong>l Problema C<br />
Para po<strong>de</strong>r resolver éste problema es necesario tener conocimientos previos en la teoría <strong>de</strong><br />
grafos. Como hallar todos <strong>los</strong> caminos más cortos y hallar caminos intermedios.<br />
En la solución presentada, se utiliza el algoritmo <strong>de</strong> Dijkstra. Solo se presenta la explicación<br />
<strong>de</strong> este algoritmo.<br />
Representamos <strong>los</strong> nodos con una matriz <strong>de</strong> distancia:<br />
0 1 2 3 4 5 6<br />
0 0 1 1 2 3 0 0<br />
1 0 0 0 0 0 2 0<br />
2 0 0 0 0 0 0 4<br />
3 0 0 0 0 0 0 2<br />
4 0 0 0 0 0 0 4<br />
5 0 0 0 0 0 0 1<br />
6 0 0 0 0 0 0 0<br />
Creamos un vector <strong>de</strong> distancia iniciado en infinito. En el código se pue<strong>de</strong> poner un número<br />
muy gran<strong>de</strong>, o el máximo valor aceptable.<br />
0 1 2 3 4 5 6<br />
inf inf inf inf inf inf inf<br />
Luego se crea un vector don<strong>de</strong> se marcará cada uno <strong>de</strong> <strong>los</strong> nodos procesados. Inicialmente se<br />
fijan estos valores en falso.<br />
0 1 2 3 4 5 6<br />
false false false false false false false<br />
0 0 0 0 0 0 0<br />
Se comienza con el origen y anotamos las distancias a <strong>los</strong> lugares directamente conectados. Si<br />
la distancia es menor a la registrada se cambia, por esto se inicializó todo en infinito.<br />
En la primera iteración el vector <strong>de</strong> distancias queda como sigue:<br />
0 1 2 3 4 5 6<br />
false false false false false false false<br />
0 1 1 2 3 inf inf<br />
Se escoge el mínimo y se marca como procesado verda<strong>de</strong>ro.<br />
0 1 2 3 4 5 6<br />
true false false false false false false<br />
0 1 1 2 3 inf inf<br />
continuamos <strong>de</strong>l mínimo encontrado y continuamos con el proceso en forma iterativa obteniendo:<br />
0 1 2 3 4 5 6<br />
true false false false false false false<br />
0 1 1 2 3 3 inf<br />
Veamos que en el nodo 5 se ha hallado el valor 3 que es la suma <strong>de</strong>l costo para llegar a 1<br />
más el costo <strong>de</strong> llegar <strong>de</strong> 1 a 5, dando 3. Tomamos el valor mínimo en entre infinito y 3.