Instruções
Implemente o algoritmo de busca em profundidade
Neste laboratório, você irá implementar um algoritmo de travessia de grafo chamado <dfn>depth-first search</dfn> (DFS).
Enquanto uma <dfn>busca em largura</dfn> (BFS) explora os vizinhos nível por nível, a <dfn>busca em profundidade</dfn> mergulha o mais fundo possível em um único
path de arestas antes de retroceder.
Uma vez que o algoritmo alcança o fim de um path (um node sem vizinhos não visitados), ele retrocede para o node mais recente que ainda possui arestas não exploradas e continua a busca a partir daí.
Para implementar esse algoritmo iterativamente, você vai querer usar uma stack. Em Javascript, um Array padrão serve perfeitamente como uma stack usando os métodos .push() e .pop(), seguindo o princípio Last-In-First-Out (LIFO). Isso garante que o vizinho mais recentemente adicionado à stack seja o próximo a ser explorado.
Uma saída simples deste algoritmo é uma lista de nós que são acessíveis a partir de um determinado nó. Portanto, você também vai querer acompanhar os nós que visita.
Objetivo: Cumprir as user stories abaixo e fazer com que todos os testes passem para completar o laboratório.
Histórias de Usuário:
1. Você deve definir uma função chamada dfs.
1. A função dfs deve receber dois argumentos:
graph: Uma matriz de adjacência (um array de arrays).root: Um rótulo numérico de nó (o índice inicial) que é o valor numérico do nó entre0en - 1, ondené o número total de nós no grafo.
O que fazer:
Testes:
- Você deve ter uma função chamada `dfs` que recebe dois argumentos.
- `dfs([[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]], 1)` deve retornar uma lista com `1`, `2`, `3` e `0`.
- `dfs([[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]], 3)` deve retornar uma lista com `1`, `2`, `3` e `0`.
- `dfs([[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]], 3)` deve retornar `[3]`.
- `dfs([[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], 3)` deve retornar uma lista com `3` e `2`.
- `dfs([[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], 0)` deve retornar uma lista com `0` e `1`.
Preview