breadth first search c program traverse graph
Este tutorial cubre la búsqueda de amplitud primero en C ++ en la que el gráfico o árbol se recorre en amplitud. También aprenderá el algoritmo y la implementación de BFS:
Este tutorial explícito de C ++ le dará una explicación detallada de las técnicas de recorrido que se pueden realizar en un árbol o gráfico.
El recorrido es la técnica con la que visitamos todos y cada uno de los nodos del gráfico o árbol. Hay dos métodos estándar de recorridos.
- Búsqueda primero en amplitud (BFS)
- Búsqueda en profundidad (DFS)
=> Consulte aquí para explorar la lista completa de tutoriales de C ++.
ciclo de vida del desarrollo de software 5 fases
Lo que vas a aprender:
Técnica de primera búsqueda de amplitud (BFS) en C ++
En este tutorial, discutiremos en detalle la técnica de búsqueda en amplitud.
En la técnica de recorrido de la amplitud primero, el gráfico o el árbol se recorre a lo ancho. Esta técnica utiliza la estructura de datos de la cola para almacenar los vértices o nodos y también para determinar qué vértice / nodo debe tomarse a continuación.
El algoritmo de amplitud primero comienza con el nodo raíz y luego atraviesa todos los nodos adyacentes. Luego, selecciona el nodo más cercano y explora todos los demás nodos no visitados. Este proceso se repite hasta que se exploran todos los nodos del gráfico.
Algoritmo de búsqueda en amplitud primero
A continuación se muestra el algoritmo para la técnica BFS.
Considere G como un gráfico que vamos a atravesar utilizando el algoritmo BFS.
Sea S el nodo raíz / inicial del gráfico.
- Paso 1: Comience con el nodo S y colóquelo en la cola.
- Paso 2: Repita los siguientes pasos para todos los nodos del gráfico.
- Paso 3: Dequeue S y procese.
- Paso 4: Ponga en cola todos los nodos adyacentes de S y proceselos.
- (FIN DEL BUCLE)
- Paso 6: SALIDA
Pseudocódigo
El pseudocódigo para la técnica BFS se proporciona a continuación.
|_+_|Travesías con ilustraciones
Sea 0 el nodo inicial o el nodo fuente. Primero, lo ponemos en cola en la cola visitada y todos sus nodos adyacentes en la cola.
A continuación, tomamos uno de los nodos adyacentes para procesar, es decir, 1. Lo marcamos como visitado eliminándolo de la cola y colocamos sus nodos adyacentes en la cola (2 y 3 ya están en la cola). Como 0 ya está visitado, lo ignoramos.
preguntas y respuestas de la entrevista del ingeniero de soporte de escritorio
A continuación, retiramos el nodo 2 y lo marcamos como visitado. Luego, su nodo adyacente 4 se agrega a la cola.
A continuación, sacamos 3 de la cola y lo marcamos como visitado. El nodo 3 tiene solo un nodo adyacente, es decir, 0 que ya está visitado. Por lo tanto, lo ignoramos.
En esta etapa, solo el nodo 4 está presente en la cola. Su nodo adyacente 2 ya está visitado, por lo que lo ignoramos. Ahora marcamos 4 como visitado.
A continuación, la secuencia presente en la lista visitada es el recorrido en amplitud del gráfico dado.
Si observamos el gráfico dado y la secuencia transversal, podemos notar que para el algoritmo BFS, de hecho recorremos el gráfico a lo ancho y luego pasamos al siguiente nivel.
Implementación de BFS
|_+_|Producción:
cómo declarar la cola en java
Amplitud primero transversal para el gráfico dado (con 0 como nodo inicial):
0 1 2 3 4
Hemos implementado el BFS en el programa anterior. Tenga en cuenta que el gráfico tiene la forma de una lista de adyacencia y luego usamos un iterador para recorrer la lista y realizar BFS.
Hemos utilizado el mismo gráfico que usamos con fines ilustrativos como entrada al programa para comparar la secuencia transversal.
Análisis de tiempo de ejecución
Si V es el número de vértices y E es el número de aristas de un gráfico, entonces la complejidad de tiempo para BFS se puede expresar como O (| V | + | E |) . Dicho esto, también depende de la estructura de datos que usemos para representar el gráfico.
Si usamos la lista de adyacencia (como en nuestra implementación), entonces la complejidad del tiempo es O (| V | + | E |).
Si usamos la matriz de adyacencia, entonces la complejidad del tiempo es O (V ^ 2) .
Aparte de las estructuras de datos utilizadas, también existe un factor de si el gráfico está densamente poblado o escasamente poblado.
Cuando el número de vértices excede el número de aristas, se dice que el gráfico está escasamente conectado ya que habrá muchos vértices desconectados. En este caso, la complejidad temporal del gráfico será O (V).
Por otro lado, a veces el gráfico puede tener un número mayor de aristas que el número de vértices. En tal caso, se dice que el gráfico está densamente poblado. La complejidad temporal de un gráfico de este tipo es O (E).
Para concluir, lo que significa la expresión O (| V | + | E |) depende de si el gráfico está densa o escasamente poblado, el factor dominante, es decir, los bordes o los vértices, determinará la complejidad temporal del gráfico en consecuencia.
Aplicaciones de BFS Traversal
- Recolección de basura: La técnica de recolección de basura, el 'algoritmo de Cheney', utiliza un recorrido transversal en amplitud para copiar la recolección de basura.
- Difusión en redes: Un paquete viaja de un nodo a otro utilizando la técnica BFS en la red de transmisión para llegar a todos los nodos.
- Navegacion GPS: Podemos usar BFS en la navegación GPS para encontrar todos los nodos de ubicación adyacentes o vecinos.
- Sitios de redes sociales: Dada una persona 'P', podemos encontrar a todas las personas dentro de una distancia, 'd' desde p usando BFS hasta los niveles d.
- Redes peer to peer: Nuevamente, BFS se puede utilizar en redes peer to peer para encontrar todos los nodos adyacentes.
- Ruta más corta y árbol de expansión mínimo en el gráfico no ponderado: La técnica BFS se utiliza para encontrar la ruta más corta, es decir, la ruta con el menor número de aristas en el gráfico no ponderado. De manera similar, también podemos encontrar un árbol de expansión mínimo usando BFS en el gráfico no ponderado.
Conclusión
La técnica de búsqueda en amplitud es un método que se utiliza para atravesar todos los nodos de un gráfico o un árbol a lo ancho.
Esta técnica se usa principalmente para encontrar el camino más corto entre los nodos de un gráfico o en aplicaciones que requieren que visitemos todos los nodos adyacentes como en las redes.
=> Haga clic aquí para obtener el curso gratuito de C ++.
Lectura recomendada
- Árbol de búsqueda binaria C ++: implementación de BST y operaciones con ejemplos
- Estructura de datos de árbol B y árbol B + en C ++
- Implementación de gráficos en C ++ mediante lista de adyacencia
- Estructura de datos de árbol binario en C ++
- Las 12 mejores herramientas de creación de gráficos de líneas para crear gráficos de líneas impresionantes (RANKINGS 2021)
- Estructura de datos de montón y árbol AVL en C ++
- Árboles en C ++: terminología básica, técnicas transversales y tipos de árboles de C ++
- Gráfico de causa y efecto: técnica de escritura de casos de prueba dinámica para una cobertura máxima con menos casos de prueba