Escolar Documentos
Profissional Documentos
Cultura Documentos
Busca em Grafos
Objetivo: sistematicamente explorar todos os vrtices Objetivo: sistematicamente explorar todos os vrtices e arestas de um grafo. e arestas de um grafo. Dois tipos de busca: Dois tipos de busca: Busca em amplitude (Breadth First Search BFS). Busca em amplitude (Breadth First Search BFS). Busca em profundidade (Depth First Search Busca em profundidade (Depth First Search DFS). DFS).
Busca em Grafos
Algoritmo BFS
Assumir que o grafo G = (V, E) representado com lista de Assumir que o grafo G = (V, E) representado com lista de adjacncias. adjacncias. Para cada vrtice no grafo, o algoritmo mantm estruturas Para cada vrtice no grafo, o algoritmo mantm estruturas auxiliares: auxiliares: A varivel cor[u] mantm a informao sobre a cor de A varivel cor[u] mantm a informao sobre a cor de cada vrtice. cada vrtice. A varivel [u] mantm a informao do predecessor de A varivel [u] mantm a informao do predecessor de cada vrtice. Quando no existe predecessor [u] = NIL. cada vrtice. Quando no existe predecessor [u] = NIL. d[u] mantm o valor da distncia entre o vrtice inicial e u. d[u] mantm o valor da distncia entre o vrtice inicial e u. Uma fila Q com poltica FIFO para gerenciar a lista de Uma fila Q com poltica FIFO para gerenciar a lista de vrtices de cor cinza. vrtices de cor cinza.
Algoritmo BFS
BFS(G, s) for u V[G] {s} do cor[u] BRANCO d[u] [u] NIL cor[s] CINZA d[s] 0 [s] NIL Q {s} while Q do u Desenfileira[Q] for v Adj[u] do if cor[v] = BRANCO then cor[v] CINZA d[v] d[u] + 1 [v] u Enfileira(Q, v) cor[u] PRETO
Teoria dos Grafos Jorge Figueiredo, DSC/UFCG Teoria dos Grafos
Algoritmo BFS
BFS(G, s) for u V[G] {s} do cor[u] BRANCO d[u] [u] NIL cor[s] CINZA d[s] 0 [s] NIL Q {s} while Q do u Enfileira[Q] for v Adj[u] do if cor[v] = BRANCO then cor[v] CINZA d[v] d[u] + 1 [v] u Enfileira(Q, v) cor[u] PRETO
Inicia variveis auxiliares Para cada um dos vrtices, Com exceo da origem
Algoritmo BFS
BFS(G, s) for u V[G] {s} do cor[u] BRANCO d[u] [u] NIL cor[s] CINZA d[s] 0 [s] NIL Q {s} while Q do u Desenfileira[Q] for v Adj[u] do if cor[v] = BRANCO then cor[v] CINZA d[v] d[u] + 1 [v] u Enfileira(Q, v) cor[u] PRETO
Teoria dos Grafos
Algoritmo BFS
BFS(G, s) for u V[G] {s} do cor[u] BRANCO d[u] [u] NIL cor[s] CINZA d[s] 0 [s] NIL Q {s} while Q do u Desenfileira[Q] for v Adj[u] do if cor[v] = BRANCO then cor[v] CINZA d[v] d[u] + 1 [v] u Enfileira(Q, v) cor[u] PRETO
Teoria dos Grafos
Se o vrtice adjacente branco, significa que ele nunca foi visitado. Deve ser pintado de CINZA e enfileirado para posterior processamento.
Algoritmo BFS
BFS(G, s) for u V[G] {s} do cor[u] BRANCO d[u] [u] NIL cor[s] CINZA d[s] 0 [s] NIL Q {s} while Q do u Desenfileira[Q] for v Adj[u] do if cor[v] = BRANCO then cor[v] CINZA d[v] d[u] + 1 [v] u Enfileira(Q, v) cor[u] PRETO
Teoria dos Grafos
Exemplo BFS
r s t u
Exemplo BFS
r s t u r s
Exemplo BFS
t u
0
w
1
v
0 1
w
Q: s
Q: w
Exemplo BFS
r s t u r s
Exemplo BFS
t u
1
v
0 1
w
2 2
x
1 2
v
0 1
w
2 2
x
Q: r
Q:
Exemplo BFS
r s t u r s
Exemplo BFS
t u
1 2
v
0 1
w
2 2
x
3
y
1 2
v
0 1
w
2 2
x
3 3
y
Q: x
Q: v
Exemplo BFS
r s t u r s
Exemplo BFS
t u
1 2
v
0 1
w
2 2
x
3 3
y
1 2
v
0 1
w
2 2
x
3 3
y
Q: u
Q: y
Exemplo BFS
r s t u
1 2
v
0 1
w
2 2
x
3 3
y
Q:
Algoritmo DFS
DFS(G) for u V[G] do cor[u] BRANCO [u] NIL tempo 0 for u V[G] do if cor[u] = BRANCO then VisitaDFS(u) VisitaDFS(u) cor[u] CINZA d[u] tempo tempo + 1 for v Adj[u] do if cor[v] = BRANCO then [v] u VisitaDFS(v) cor[u] PRETO F[u] tempo tempo + 1
Teoria dos Grafos Jorge Figueiredo, DSC/UFCG
Exemplo DFS
origem
Exemplo DFS
d 1 |
f | |
Exemplo DFS
Exemplo DFS
d 1 |
f | |
d 1 |
f | |
2 |
2 |
3 |
Exemplo DFS
Exemplo DFS
d 1 |
f | |
d 1 |
f | |
2 |
2 |
3 | 4
3 | 4
5 |
Exemplo DFS
Exemplo DFS
d 1 |
f | |
d 1 |
f 8 | |
2 |
2 | 7
3 | 4
5 | 6
3 | 4
5 | 6
Exemplo DFS
Exemplo DFS
d 1 |
f 8 | |
d 1 |
f 8 | |
2 | 7
9 |
2 | 7
9 |10
3 | 4
5 | 6
3 | 4
5 | 6
Exemplo DFS
Exemplo DFS
d 1 |
f 8 |11 |
f 8 |11 |
1 |12
2 | 7
9 |10
2 | 7
9 |10
3 | 4
5 | 6
3 | 4
5 | 6
Exemplo DFS
Exemplo DFS
f 8 |11 13|
f 8 |11 13|
1 |12
1 |12
2 | 7
9 |10
2 | 7
9 |10
3 | 4
5 | 6
3 | 4
5 | 6
14|
Exemplo DFS
Exemplo DFS
f 8 |11 13|
f 8 |11 13|16
1 |12
1 |12
2 | 7
9 |10
2 | 7
9 |10
3 | 4
5 | 6
14|15
3 | 4
5 | 6
14|15