Você está na página 1de 12

“AÑO DEL DIÁLOGO Y LA

RECONCILIACIÓN
…2““NACIONAL

INGENIERIA DE SISTEMAS

ALUMNOS:

CHILON CUZCO, David.


AREA:
CORREA COTRINA, Henry
INTELIGENCIA ARTIFICIAL
ESQUEN RODAS, Gerardo.

PEREZ CASTAÑEDA, Segundo.


PROFESOR:
ROMERO FLORES, Marco
LUIS TENORIO CABRERA
TEMA:
BUSQUEDA PRIMERO EN AMPLITUD

Guadalupe-2018
CONTENIDO

1.1. INTRODUCCIÒN ........................................................... ………………………………..2


1.2. DEFINICIÒN:. ............................................................................................................. 3
1.2.1.difiniciòn de un grafo: ......................................................................................................... 4
1.3. PROCEDIMIENTO...................................................................................................... 4
1.4. ALGORITMO DE BUSQUEDA EN ANCHURA:………………………………………..5-6
1.5. APLICACION EN C# : 8 puzzle ……………………………………………………………………………………………7-11

1
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
BUSQUE EN ANCHURA

1.1. INTRODUCCIÓN:

En esta oportunidad aprenderemos a realizar Algoritmos de Búsqueda en Anchura.

Esta técnica consiste en visitar todos los vértices y arcos del grafo, exactamente una vez
y en un orden específico predeterminado, por lo cual podríamos decir que estos
algoritmos simplemente nos permiten hacer recorridos controlados dentro del grafo con
algún propósito.

Siendo la búsqueda una de las operaciones más sencillas y elementales en cualquier


estructura de datos, se han estandarizado el uso de estos algoritmos para ello, por lo que
se conocen como algoritmos de búsqueda. Sin embargo, es importante resaltar que
pueden utilizarse para muchísimas otras operaciones con grafos que no necesariamente
incluyan la búsqueda de algún elemento dentro del grafo.

2
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
1.2.DEFINICIÓN:

En Ciencias de la Computación, Búsqueda en anchura (en inglés BFS - Breadth First


Search) es un algoritmo de búsqueda no informada utilizado para recorrer o buscar
elementos en un grafo (usado frecuentemente sobre árboles). Intuitivamente, se
comienza en la raíz (eligiendo algún nodo como elemento raíz en el caso de un grafo) y
se exploran todos los vecinos de este nodo. A continuación para cada uno de los vecinos
se exploran sus respectivos vecinos adyacentes, y así hasta que se recorra todo el árbol.

Formalmente, BFS es un algoritmo de búsqueda sin información, que expande y


examina todos los nodos de un árbol sistemáticamente para buscar una solución. El
algoritmo no usa ninguna estrategia heurística.

3
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
1.2.1. DEFINICIÓN DE UN GRAFO:

En matemáticas y ciencias de la computación, un grafo (del griego grafos: dibujo,


imagen) es un conjunto de objetos llamados vértices o nodos unidos por enlaces
llamados aristas o arcos.

Típicamente, un grafo se representa gráficamente como un conjunto de puntos (vértices


o nodos) unidos por líneas (aristas).

Desde un punto de vista práctico, los grafos permiten estudiar las interrelaciones entre
unidades que interactúan unas con otras. Por ejemplo, una red de computadoras puede
representarse y estudiarse mediante un grafo, en el cual los vértices representan
terminales y las aristas representan conexiones (las cuales, a su vez, pueden ser cables o
conexiones inalámbricas).

1.3. PROCEDIMIENTO:

 Dado un vértice fuente s, Breadth-first search sistemáticamente explora los vértices de G


para “descubrir” todos los vértices alcanzables desde s.
 Calcula la distancia (menor número de vértices) desde s a todos los vértices alcanzables.
 Después produce un árbol BF con raíz en s y que contiene a todos los vértices alcanzables.
 El camino desde dt a cada vértice en este recorrido contiene el mínimo número de
vértices. Es el camino más corto medido en número de vértices.
 Su nombre se debe a que expande uniformemente la frontera entre lo descubierto y lo no
descubierto. Llega a los nodos de distancia k, sólo tras haber llegado a todos los nodos a
distancia k-1.

4
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
1.4. ALGORITMO DE BUSQUEDA EN ANCHURA:

La estrategia que usaremos para garantizar este recorrido es utilizar una cola que nos permita
almacenar temporalmente todos los nodos de un nivel, para ser procesados antes de pasar al
siguiente nivel hasta que la cola esté vacía.

Inmediatamente después de declarar nuestra estructura de cola, agregamos el nodo raíz para
poder iniciar el proceso de búsqueda. Esto se hace porque necesitamos tener al menos un
elemento en nuestra cola, dado que la condición de salida es que la cola esté vacía. Luego
marcamos el nodo raíz como visitado.

5
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
Cada vez que visitamos un nodo, lo desencolamos e imprimimos por pantalla el valor del nodo
para ir indicando el recorrido. Luego agregamos a la cola todos los nodos del siguiente nivel y los
marcamos como visitados antes de comenzar el ciclo de nuevo, en el que procesaremos estos
nuevos nodos que hemos agregado a la cola.

Si encontramos el elemento buscado, la función BFS retornará al “main” e imprimirá entre


comillas simples el valor del elemento buscado.

6
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
1.5. APLICACIÓN EN C#

CODIGO:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RobotinBuscaRobotina
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MOV.Text = movimientos.ToString();
}
private bool botonA1 = false;
private bool botonA2 = false;
private bool botonA3 = false;
private bool botonB1 = false;
private bool botonB2 = false;
private bool botonB3 = false;
private bool botonC1 = false;

7
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
private bool botonC2 = false;
private bool botonC3 = false;

int movimientos = 0;

public void Intercambio(Button origen,Button destino)


{
string aux;
if(origen.Text !="")
{
if(destino.Text == "")
{
aux = origen.Text;
origen.Text = "";
destino.Text = aux;
}
}

private void label4_Click(object sender, EventArgs e)


{

private void Form1_Load(object sender, EventArgs e)


{
MessageBox.Show("BIENVENIDO");
}

private void A1_Click(object sender, EventArgs e)


{
botonA1 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(A1, B1);
Intercambio(A1, A2);
}

private void B1_Click(object sender, EventArgs e)


{
botonB1 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(B1, A1);
Intercambio(B1, B2);
Intercambio(B1, C1);

private void C1_Click(object sender, EventArgs e)

8
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
{
botonC1 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(C1, B1);
Intercambio(C1, C2);
}

private void D1_Click(object sender, EventArgs e)


{

private void A2_Click(object sender, EventArgs e)


{
botonA2 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(A2, A1);
Intercambio(A2, B2);
Intercambio(A2, A3);
}

private void B2_Click(object sender, EventArgs e)


{
botonB2 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(B2, B1);
Intercambio(B2, A2);
Intercambio(B2, B3);
Intercambio(B2, C2);
}

private void button1_Click(object sender, EventArgs e)


{

private void C2_Click(object sender, EventArgs e)


{
botonC2 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(C2, B2);
Intercambio(C2, C1);
Intercambio(C2, C3);

9
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
private void D2_Click(object sender, EventArgs e)
{

private void A3_Click(object sender, EventArgs e)


{
botonA3 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(A3, A2);
Intercambio(A3, B3);
}

private void B3_Click(object sender, EventArgs e)


{
botonB3 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(B3, B2);
Intercambio(B3, B3);
Intercambio(B3, A3);
Intercambio(B3, C3);
}

private void C3_Click(object sender, EventArgs e)


{
botonC3 = true;
movimientos++;
MOV.Text = movimientos.ToString();

Intercambio(C3, C2);
Intercambio(C3, B3);

private void D3_Click(object sender, EventArgs e)


{

10
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20
private void A4_Click(object sender, EventArgs e)
{
}

private void B4_Click(object sender, EventArgs e)


{
}

private void C4_Click(object sender, EventArgs e)


{
}

private void origen_Click(object sender, EventArgs e)


{

private void button1_Click_1(object sender, EventArgs e)


{
MessageBox.Show("El Juego comienza en 3 Segundos:");
MessageBox.Show("1");
MessageBox.Show("2");
MessageBox.Show("3");

}
}
}

11
Segundo P, David, Marco P, Henry C, Gerardo E. Marzo 20

Você também pode gostar