Introduzione
La visita in ampiezza (BFS) può generare un albero detto albero BFS, che rappresenta i cammini minimi per tutti i nodi raggiungibili partendo da un nodo iniziale s
.
Proprietà
La distanza minima di un vertice
x
dalla sorgentes
nel grafoG
equivale alla profondità dix
nell’albero BFS.
Algoritmo Vettore dei Padri
Calcoliamo il vettore dei padri del albero BFS in .
def BFSpadri(x, G) :
'''
Restituisce l'albero BFS radicato in `x` rappresentato
attraverso un vettore dei padri
'''
P = [-1] * len(G)
P[x] = x # radice
testa = 0
while len(coda) > testa:
u = coda[i]
i += 1
for y in G[u]:
if P[y] == -1:
P[y] = u
coda.append(y)
return P
Algoritmo Vettore delle Distanze
Il vettore delle distanze D
di un grafo è un vettore i cui elemento D[x]
rappresenta la distanza del nodo x
dal nodo sorgente s
.
É possibile determinare questo vettore in modificando leggermente la procedura di visita vita precedentemente.
def BFSdistanze(x,G):
'''
Restituisce il vettore delle distanze da `x` in `G`
'''
D = [-1] * len(G)
D[x] = x # radice
testa = 0
while len(coda) > testa:
u = coda[i]
i += 1
for y in G[u]:
if P[y] == -1:
D[y] = D[u] + 1
coda.append(y)
return D