Agora cada aresta pode ter um custo diferente.
Uma ligação deixa de significar apenas “existe ou não existe”. Ela pode carregar distância, tempo, preço, consumo ou qualquer outro valor.
O que é o peso de uma aresta?
Em um grafo ponderado, cada aresta possui um valor associado.
Estradas
Aresta A–B pode representar uma estrada de 12 km.
Rotas
Aresta A–B pode representar 20 minutos de viagem.
Transporte
Aresta A–B pode custar R$ 8,00.
Exemplo de grafo ponderado
Usaremos o mesmo grafo em toda a aula. Os números amarelos são os pesos das arestas.
Matriz de adjacência com pesos
Antes, a matriz guardava apenas 0 ou 1. Agora ela pode guardar o próprio peso.
Existe ou não existe
adj[A][B] = 1
O valor 1 apenas dizia que havia uma ligação.
Guardamos o custo
adj[A][B] = 4
Agora sabemos que a ligação existe e custa 4.
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| A | 0 | 4 | 2 | ∞ | ∞ | ∞ | ∞ |
| B | 4 | 0 | ∞ | 5 | 1 | ∞ | ∞ |
| C | 2 | ∞ | 0 | ∞ | 7 | 3 | ∞ |
| D | ∞ | 5 | ∞ | 0 | ∞ | ∞ | 6 |
| E | ∞ | 1 | 7 | ∞ | 0 | ∞ | 2 |
| F | ∞ | ∞ | 3 | ∞ | ∞ | 0 | 4 |
| G | ∞ | ∞ | ∞ | 6 | 2 | 4 | 0 |
float("inf").
Lista de adjacência com pesos
Na lista, cada vizinho precisa vir acompanhado do peso da aresta.
(B, 4) significa: “B é vizinho e o custo para chegar até B por esta aresta é 4”.
Como representar em Python
V = 7 INF = float("inf") adj = [ [INF] * V for _ in range(V) ] for i in range(V): adj[i][i] = 0 # A --4-- B adj[0][1] = 4 adj[1][0] = 4
V = 7 grafo = [ [] for _ in range(V) ] # A --4-- B grafo[0].append((1, 4)) grafo[1].append((0, 4))
Agora o caminho tem custo total
O melhor caminho não é necessariamente aquele que usa menos arestas.
Custo: 4 + 1 + 2 = 7
Custo: 2 + 3 + 4 = 9
Por que BFS deixa de ser suficiente?
BFS considera que cada passo tem o mesmo custo. Com pesos diferentes, isso pode levar à escolha errada.
A → B
1 aresta, mas custo total = 10.
A → C → B
2 arestas, mas custo total = 3.
Resumo
| Conceito | Grafo não ponderado | Grafo ponderado |
|---|---|---|
| Aresta | apenas ligação | ligação + peso |
| Matriz | 0 ou 1 | peso ou ∞ |
| Lista | vizinho | (vizinho, peso) |
| Objetivo comum | menor nº de passos | menor custo acumulado |
| Algoritmo típico | BFS | Dijkstra |