Dado um gráfico G = ( V, E, W ), definimos G′= ( V, E,W′) com W′( e ) = a w ( e ) + 1 Onde a=|E|+ε para alguns ε≥0 como proposto nos comentários da pergunta.
Lema
LetP um caminho em G com custo C, ie w(P)=C. Então,P tem custo aC+|P| no G′, ie w′(P)=aC+|P|.
O lema segue diretamente da definição de w′.
Ligue para o resultado de Dijkstra em G′ P, que é o caminho mais curto da G′. PresumirP não era o caminho mais curto com menos arestas (entre todos os caminhos mais curtos) G. Isso pode acontecer de uma de duas maneiras.
- P não é o caminho mais curto G.
Então, existe um caminhoP′ com w(P′)<w(P). Como|P|,|P′|≤|E|≤a, isso implica que também w′(P′)<w′(P)com lema acima. Isso contradiz queP foi escolhido como o caminho mais curto G′.
- Pé um caminho mais curto, mas existe um caminho mais curto com menos arestas.
Então, existe outro caminho mais curtoP′ - ie w(P)=w(P′) - com |P′|<|P|. Isso implica quew′(P′)<w′(P) pelo lema acima, o que contradiz novamente que P é o caminho mais curto G′.
Como ambos os casos levaram a uma contradição, P é realmente um caminho mais curto com menos arestas em G.
Isso cobre metade da proposição. A respeitoa<|E|, ie a=|E|−ε com ε∈(0,|E|)?
- Na verdade, também precisamos disso a ou todos os pesos em Gsão inteiros. De outra forma,w(P′)<w(P) não causa os pesos em G′ ser pelo menos |E|separados. Isso não é uma restrição; sempre podemos escalarw com um fator constante para que todos os pesos sejam inteiros, supondo que começamos com pesos racionais.