Está en la página 1de 3

ESCUELA POLITÉCNICA NACIONAL

NOMBRE: Milan Leonardo Contreras Andrade

FECHA: 19/06/2020

MATERIA: Inteligencia Artificial

Implementar con Python la búsqueda primero en anchura en el árbol de las ciudades para ir de
Arad a Bucarest. 
Implementar con Python la búsqueda primero en profundidad en el árbol de la diapositiva 13
del archivo búsqueda de soluciones - soluciones no informadas. 

Código:

"""
Created on Sun Jun 17 2020

@author: Milan Contreras


"""
#Se representa el grafo
graph = {
'Arad' : ['Zerind', 'Sibiu', 'Timisoara'],
'Zerind' : ['Oradea'],
'Sibiu' : ['Fagaras','Rimmicu Vilcea'],
'Timisoara' : ['Lugoj'],
'Oradea' : ['Sibiu'],
'Fagaras' : ['Bucharest'],
'Rimmicu Vilcea' : ['Pitesti','Craiova'],
'Lugoj' : ['Mehadia'],
'Bucharest' : ['Giurgiu','Urziceni'],
'Pitesti' : ['Bucharest'],
'Craiova' : ['Pitesti'],
'Mehadia' : ['Drobeta'],
'Giurgiu' : [],
'Urziceni' : ['Vaslui', 'Hirsova'],
'Drobeta' : ['Craiova'],
'Vaslui' : ['Iasi'],
'Hirsova' : ['Eforie'],
'Iasi' : ['Neamt'],
'Eforie' : [],
'Neamt' : []
}

#Se representa el árbol


graph2 = {
'A' : ['B','C','D'],
'B' : ['E','F'],
'C' : ['G','H','I'],
'D' : ['J'],
'E' : ['K','L'],
'F' : ['M'],
'G' : [],
'H' : ['N','O'],
'I' : [],
'J' : ['P','Q'],
'K' : [],
'L' : [],
'M' : [],
'N' : [],
'O' : ['R','S','T'],
'P' : [],
'Q' : ['U'],
'R' : [],
'S' : ['V'],
'T' : [],
'U' : [],
'V' : [],
}

#Busqueda en Anchura
def bfs(graph, nodo,destino): #Como elementos de entrada se tiene el
#grafo, el nodo en el que empieza
#y el nodo final

visitados=[] #como es un grafo es necesario tener un


#vector el cual controle los nodos
#ya visitados

cola=[]

visitados.append(nodo) #Se coloca el primer nodo visitado

cola.append(nodo) #Se coloca el primer nodo en la cola


print("-----------------------------------------------------")
print("BFS: ")
while cola: #Mientras la cola aun tenga elementos
#se seguirá iterando
print(cola) #Se muestra la cola

s = cola.pop(0) #Saco el elemento de la primera posición

if s==destino: #Si se llega al destino se detendra


break

for vecino in graph[s]: #Visitara las conexiones del nodo


#donde se encuentre

if vecino not in visitados: #Si el nodo no ha sido visitado


#este se ira al final de la cola
visitados.append(vecino)
cola.append(vecino)
def dfs(graph,nodo): #Como elementos de entrada se tiene el
#grafo y el nodo en el que empieza

pila=[]

pila.append(nodo) #Se coloca el primer nodo en la cola


print("-----------------------------------------------------")
print("DFS: ")
while pila: #Mientras la pila aun tenga elementos
#se seguirá iterando

print(pila) #se muestra la pila


s = pila.pop(0) #Saco el ultimo elemento ingresado

for hijos in reversed(graph[s]): #Visitara los hijos el nodo


#donde se encuentra
pila.insert(0,hijos)

#Lammada de funciones
bfs(graph,'Arad','Bucharest')
dfs(graph2,'A')

Capturas:

También podría gustarte