You are on page 1of 8

Temas: Programacin del algoritmo de bsqueda a lo ancho.

Curso: Teora de grafos y anlisis combinatorio.

Profesor: Becerra Saucedo, Julio Jos Augusto.

Facultad: Ciencias fsicas y Matemticas.

Escuela: Informtica.

Integrantes:

Ulloa Ords, Miguel Alberto.


Nuez Morocho, Jos.

Trujillo, 2017
1. Marco Terico

Recorrer un grafo significa tratar de alcanzar todos los nodos que estn relacionados con
uno que llamaremos nodo de salida. Existen bsicamente dos tcnicas para recorrer un
grafo:
El recorrido en anchura.
El recorrido en profundidad.

En este trabajo de investigacin se trabajar con el recorrido en anchura.

Recorrido en anchura
Supone recorrer el grafo, a partir de un nodo dado, en niveles, es decir, primero
los que estn a una distancia de un arco del nodo de salida, y as sucesivamente
hasta alcanzar todos los nodos a los que se pudiese llegar desde el nodo salida.

El recorrido genera un rbol.


Si el grafo no es conexo, el recorrido genera un bosque de rboles (un rbol por
componente conexa).
Se puede aplicar en grafos dirigidos.

Aplicacin:

Cuando se quiera hacer una exploracin parcial de un grafo infinito o muy grande.
Para hallar el camino ms corto desde un punto de un grafo a otro.
Si hay que encontrar una solucin partiendo de una solucin inicial y efectuando
el menor nmero de pasos posibles.
2. Resultados.
2.1. Cdigo:

#include<stdio.h>

#include <queue>

#include<iostream>

using namespace std;

#define MAX 500

vector<int> ady[ MAX ]; //lista de adyacencia

bool visitado[ MAX ]; //para nodos visitados

void bfs(){

int ini , fin;

cout<<"Nodo raiz: ";

cin>>ini;

cout<<"Nodo final: ";

cin>>fin;

cout<<"Aristas: "<<endl;

queue<int> Q;

Q.push( ini );

while( !Q.empty() ){

int actual = Q.front();

Q.pop();

if( actual == fin )break; //si se ha llegado al destino

visitado[ actual ] = true;

for( int i = 0 ; i < ady[ actual ].size() ; ++i ){ //vemos adyacentes de nodo actual

if( !visitado[ ady[ actual ][ i ] ] ){ //si no est visitado insertamos


printf("%d --> %d\n" , actual , ady[ actual ][ i ] ); //vemos recorrido BFS

Q.push( ady[ actual ][ i ] );

int main(){

int V , E , x , y;

//Numero de vertices y numero de aristas

cout<<"Numero de vertices: ";

cin>>V;

cout<<"Numero de aristas: ";

cin>>E;

cout<<endl;

//Origen y destino

for( int i = 1 ; i <= E ; ++i ){

cout<<"Vertice origen: ";

cin>>x;

cout<<"Vertice destino: ";

cin>>y;

cout<<endl;

ady[ x ].push_back( y );

bfs();

return 0;

}
2.2. Ejemplos: De los siguientes grafos hallar el rbol de expansin nico de
cada uno de ellos usando el algoritmo de bsqueda a lo ancho.
1.-
6 7

2 3 5 8 9

1 4 11 10

Respuesta:
2.-
1 2

4 5

6 7
Respuesta:
3.-

Respuesta:
* En este caso se nota que el algoritmo ha reutilizado las aristas repetidas, ya que
considera a cada una diferente, pero el algoritmo debera escribir solamente uno de cada
uno.
3. Conclusiones.

4. Referencias Bibliogrficas.

You might also like