--- id: 587d825d367417b2b2512c96 title: Depth-First Search challengeType: 1 videoUrl: '' localeTitle: Búsqueda en profundidad --- ## Description
De forma similar a la búsqueda de amplitud en primer lugar , aquí aprenderemos sobre otro algoritmo de recorrido de gráficos llamado búsqueda de profundidad en primer lugar . Mientras que la búsqueda de amplitud busca las longitudes de borde incrementales lejos del nodo de origen, la búsqueda de profundidad primero primero recorre un camino de bordes tan lejos como puede. Una vez que llegue a un extremo de una ruta, la búsqueda volverá al último nodo con una ruta de borde no visitada y continuará la búsqueda. Visualmente, esto es lo que hace el algoritmo donde el nodo superior es el punto de inicio de la búsqueda. Un resultado simple de este algoritmo es una lista de nodos a los que se puede acceder desde un nodo determinado. Entonces, al implementar este algoritmo, deberá realizar un seguimiento de los nodos que visita.
## Instructions
Escriba una función dfs() que tome un graph matriz de adyacencia no graph y una root etiqueta de nodo como parámetros. La etiqueta del nodo solo será el valor numérico del nodo entre 0 y n - 1 , donde n es el número total de nodos en el gráfico. Su función debe generar una matriz de todos los nodos accesibles desde la root .
## Tests
```yml tests: - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]] con un nodo de inicio de 1 debe devolver una matriz con 0 , 1 , 2 y 3 .' testString: 'assert.sameMembers((function() { var graph = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]]; return dfs(graph, 1);})(), [0, 1, 2, 3], "The input graph [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]] with a start node of 1 should return an array with 0, 1, 2, and 3.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]] con un nodo de inicio de 1 Debe devolver una matriz con cuatro elementos.' testString: 'assert((function() { var graph = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]]; return dfs(graph, 1);})().length === 4, "The input graph [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0]] with a start node of 1 should return an array with four elements.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]] con un nodo de inicio de 3 Debe devolver una matriz con 3 .' testString: 'assert.sameMembers((function() { var graph = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]]; return dfs(graph, 3);})(), [3], "The input graph [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]] with a start node of 3 should return an array with 3.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]] con un nodo de inicio de 3 Debe devolver una matriz con un elemento.' testString: 'assert((function() { var graph = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]]; return dfs(graph, 3);})().length === 1, "The input graph [[0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]] with a start node of 3 should return an array with one element.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] con un nodo de inicio de 3 Debe devolver una matriz con 2 y 3 .' testString: 'assert.sameMembers((function() { var graph = [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]; return dfs(graph, 3);})(), [2, 3], "The input graph [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] with a start node of 3 should return an array with 2 and 3.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] con un nodo de inicio de 3 Debe devolver una matriz con dos elementos.' testString: 'assert((function() { var graph = [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]; return dfs(graph, 3);})().length === 2, "The input graph [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] with a start node of 3 should return an array with two elements.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] con un nodo de inicio de 0 Debe devolver una matriz con 0 y 1 .' testString: 'assert.sameMembers((function() { var graph = [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]; return dfs(graph, 0);})(), [0, 1], "The input graph [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] with a start node of 0 should return an array with 0 and 1.");' - text: 'El gráfico de entrada [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] con un nodo de inicio de 0 Debe devolver una matriz con dos elementos.' testString: 'assert((function() { var graph = [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]; return dfs(graph, 0);})().length === 2, "The input graph [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]] with a start node of 0 should return an array with two elements.");' ```
## Challenge Seed
```js function dfs(graph, root) { } var exDFSGraph = [ [0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0] ]; console.log(dfs(exDFSGraph, 3)); ```
## Solution
```js // solution required ```