Você está na página 1de 2

Para descrever o algoritmo, precisamos de um pouco de terminologia e

notação.  Suponha que T é uma árvore radicada, com raiz s, em um


grafo G com custos positivos nos arcos.  A fronteira de T é o conjunto de
todos os vizinhos de T. Assim, um vértice v pertence à fronteira
de T se v não está em T mas é vizinho de algum vértice de T. 
Denotaremos por

T +

o subgrafo de G que consiste em T, mais os vértices da fronteira de T,


mais os arcos de G que têm ponta inicial em T e ponta final fora de T (e
portanto na fronteira de T).

Para cada vértice v de G, denotaremos por  dist[v] 


a distância de s a v em T .  É fácil entender dist[v]:
+

 se v está em T então dist[v] é o custo do único caminho


de s a v em T;
 se v está na fronteira de T então dist[v] é a menor das somas da
forma dist[u] + cst, sendo u um vértice em T que tem v como
vizinho e cst o custo do arco u-v;
 se v não está em T nem na fronteira de T então dist[v] é infinito.

Um gancho de um vértice v da fronteira de T é o penúltimo vértice de


algum caminho mínimo de s a v em T . É claro que todo gancho de v está
+

em T edist[v] ≡ dist[u] + cst, sendo u um gancho de v e cst o custo do


arco u-v.

Podemos agora descrever o algoritmo de Dijkstra para o problema da


SPT.  O algoritmo é iterativo. Cada iteração começa com uma árvore
radicada T, com raiz s, e o vetor dist[] de distâncias em T .  No começo da
+

primeira iteração, s é o único vértice de T e dist[] é definido da maneira


óbvia.  O processo iterativo pode ser descrito assim:  enquanto a fronteira
de T não estiver vazia,

1. escolha um vértice y na fronteira de T que tenha dist[]


mínimo;
2. seja x um gancho de y;
3. acrescente o arco x-y e o vértice y a T;
4. atualize dist[].

A escolha de y no início da iteração deve ser entendida assim:  y é um


vértice fora de T tal que dist[y] ≤ dist[v] para cada v na fronteira de T.
Podemos dizer, informalmente, que y é o vértice mais próximo de s fora
de T.

Você também pode gostar