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

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

Saved successfully!

Ooh no, something went wrong!