adv(v) em DFS

adv(v) em DFS

por Gabriel Araujo -
Número de respostas: 2

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?

Em resposta à Gabriel Araujo

Re: adv(v) em DFS

por José Coelho de Pina -

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];
    }
}