340 likes | 607 Views
Busca em Largura. BFS(G) 1 for every vertex s of G not explored yet 2 do Enqueue( S , s ) 3 mark vertex s as visited 4 while S is not empty do 5 u ← Dequeue( S ); 6 For each v in Adj[u] then 7 if v is unexplored then 8 mark edge (v,u) as tree edge
E N D
Busca em Largura BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s) 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) Running time: O(n + m) • Notação • Adj [u ] : lista dos vértices adjacentes a u em alguma ordem • Dequeue(S): Remove o primeiro elemento da fila S • Enqueue (S,v) : Adiciona o nó v na fila S
Exemplo S 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 1 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 4 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 4 5 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 4 5 2 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 5 2 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 5 2 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 5 2 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 2 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 6 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 3 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 3 3 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Exemplo S 3 4 1 BFS(G) 1 for every vertex s of G not explored yet 2 doEnqueue(S,s); 3 mark vertex s as visited 4 whileS is not empty do 5u← Dequeue(S); 6For each v in Adj[u] then 7if v is unexplored then 8 mark edge (v,u) as tree edge 9 mark vertex v as visited 10Enqueue(S,v) 2 7 5 6
Busca em Profundidade DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Busca em Profundidade : Exemplo DFS(G) 1Para todo v em G 2 Se v não visitado então 3 DFS-Visit(G, v) DFS-Visit(G, v) 1 Marque v como visitado 2Para todow em Adj(v) 3Se w não visitado então 4 Insira aresta (v, w) na árvore 5 DFS-Visit(G, w) 3 4 1 2 7 5 6
Topological Ordering Algorithm: Example v2 v3 v6 v5 v4 v7 v1 v1 Topological order:
Topological Ordering Algorithm: Example v2 v2 v3 v6 v5 v4 v7 Topological order: v1
Topological Ordering Algorithm: Example v3 v3 v6 v5 v4 v7 Topological order: v1, v2
Topological Ordering Algorithm: Example v6 v5 v4 v4 v7 Topological order: v1, v2, v3
Topological Ordering Algorithm: Example v6 v5 v5 v7 Topological order: v1, v2, v3, v4
Topological Ordering Algorithm: Example v6 v6 v7 Topological order: v1, v2, v3, v4, v5
Topological Ordering Algorithm: Example v7 v7 Topological order: v1, v2, v3, v4, v5, v6
Topological Ordering Algorithm: Example v2 v3 v6 v5 v4 v1 v2 v3 v4 v5 v6 v7 v7 v1 Topological order: v1, v2, v3, v4, v5, v6, v7.