Recorrido en anchura de un grafo (Breadth First Search) Recorrer un grafo consiste en “visitar”cada uno de los nodos a través de las aristas del mismo. Se trata de realizar recorridos de grafos de manera eficiente. Para ello, se pondrá una marca en un nodo en el momento en que es visitado, de tal manera que, inicialmente, no está marcado ningún nodo del grafo. Detallaremos el proceso para grafos no dirigidos, observando que para el caso dirigido el proceso es análogo, sólo cambia el significado del concepto de adyacencia. A continuación, describimos la idea de un procedimiento recursivo para realizar un recorrido en anchura de un grafo no dirigido G. Para ello, en primer lugar, a cada nodo, v, del grafo se le asocia un procedimiento, BF S(G, v), que se denomina recorrido en anchura de G con origen v. La idea del procedimiento BF S(G, v) es la siguiente: • Se marca el nodo v. • Si todos los nodos adyacentes a v están marcados, entonces TERMINAR; si no, marcar todos los nodos v1 , v2 , . . . , vk adyacentes a v que no estén marcados. • Repetir el proceso con los nodos adyacentes a los nodos que se han marcado en el paso anterior. Si G es conexo (es decir, si dos vértices cualesquiera de G siempre están conectados por un camino), entonces BF S(G, v) visita todos los nodos y aristas del grafo. A diferencia de lo que ocurrı́a con el recorrido en profundidad, DF S, el recorrido en anchura, BF S, no tiene naturaleza recursiva. Por ello, es posible describir un esquema algorı́tmico iterativo del recorrido en anchura usando una cola que permita controlar las visitas a los nodos. procedimiento BF S(G, v) marcar (v) poner (v) en una COLA mientras la COLA no sea vacia hacer quitar el primer elemento w de la COLA para cada vertice x adyacente a w hacer si x no esta marcado entonces marcar x poner x en la COLA Teorema 1: Sea G = (V, E) un grafo no dirigido y conexo. Para cada v ∈ V se verifica: 1. El procedimiento BF S(G, v) para. 2. Tras la ejecución del procedimiento BF S(G, v), todos los nodos de G están marcados. Sea G = (V, E) un grafo no dirigido arbitrario. Para realizar un recorrido en anchura en G se procede como sigue: 1. Se elige un nodo, v, no marcado. 2. Se ejecuta el procedimiento BF S(G, v). 3. Si no quedan nodos no marcados, el proceso TERMINA; si no, se vuelve al paso 1. En consecuencia, el procedimiento de recorrido en anchura de un grafo no dirigido arbitrario se puede describir como sigue: procedimiento BF S(G) para cada nodo no marcado, v, hacer BF S(G, v) Teorema 2: Sea G = (V, E) un grafo no dirigido. El coste del algoritmo BF S(G) es del orden θ(máx{|V |, |E|}). Nota: La ejecución de un recorrido en anchura de un grafo, G = (V, E), no dirigido proporciona de manera natural un bosque de ejecución. Las aristas del grafo, G, que no pertenecen a ningún árbol del bosque, se denomina arista de vuelta atrás. Si notamos el bosque del recorrido en anchura por B = (V, F ), entonces las aristas de vuelta atrás son las del conjunto E − F (que son las aristas no visitadas en dicho recorrido). Teorema 3: Sea G = (V, E) un grafo no dirigido y conexo. Sea B = (V, F ) un árbol de recorrido en anchura de G. • Para cada u ∈ V , el camino desde la raı́z, v, de B a u es el camino más corto desde v a u en G. • Si {u, v} ∈ E − F , entonces u y v tienen niveles en el árbol B que difieren, a lo sumo, en 1.