Olá,
Gostaria de saber como funciona essa função (adj()) nas classes de DFS. Mais precisamente, qual o critério para saber o próximo vértice adjacente?
Olá,
Gostaria de saber como funciona essa função (adj()) nas classes de DFS. Mais precisamente, qual o critério para saber o próximo vértice adjacente?
Oi Gabriel,
Mais precisamente, qual o critério para saber o próximo vértice adjacente?
Legal que você perguntou.
Essa ordem é determinada na classe Digraph
que por sua vez usa a classe Bag
.
De fato, a ordem fica meio escondida debaixo das camadas da implementação.
Considere a representação de um digrafo através de um vetor de listas de adjacência.
Nessa representação os vizinhos de cada vértice estão em uma lista (= sequência finita).
Na classe Digraph
cada lista de adjacência adj[v]
é um Bag<Integer>
, ou seja uma lista ligada de vértices.
Isso nos leva a sua questão.
A ordem em que os vizinhos de um vértice v
são visitados (=iterados) é a ordem em que eles aparecem na lista ligada (=Bag<Integer>
) adj[v]
.
public class Digraph { [...] private Bag<Integer>[] adj; // adj[v] = adjacency list for vertex v public Digraph(int V) { [...] adj = (Bag<Integer>[]) new Bag[V]; for (int v = 0; v < V; v++) { adj[v] = new Bag<Integer>(); } } public void addEdge(int v, int w) { adj[v].add(w); E++; } public Iterable<Integer> adj(int v) { return adj[v]; } }
Entendi professor, muito obrigado!