Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ReporteTectico v1 PDF
ReporteTectico v1 PDF
Diwsgen López Lozada Jesús Huerta Aguilar Juan Pablo Hernández Flores
Benemérita Universidad autónoma de Benemérita Universidad autónoma de Benemérita Universidad autónoma de
Puebla Puebla Puebla
FCC FCC FCC
202043856 202041509 202068295
diwsgen.lopez@alumno.buap.mx jesus.huertaag@alumno.buap.mx juan.hernandezfl@alumno.buap.mx
KEYWORDS
Graphs, Programming, Algorithms, Problem, Computing
OBJETIVO
El objetivo de este trabajo es presentar una introducción al
Problema de Coloreo de Grafos y dos algoritmos de búsqueda en Ilustración 1: Diferencias entre BFS y DFS
grafos, DFS y BFS, y mostrar cómo estos algoritmos se pueden
utilizar para resolver el problema de coloreo de grafos. Se
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
DFS es un algoritmo de búsqueda en grafos que funciona Los algoritmos BFS y DFS han sido utilizados para resolver
explorando tan lejos como sea posible a lo largo de cada rama antes muchos problemas de coloreo de grafos. El algoritmo BFS es
de retroceder. Es decir, se trata de un algoritmo de recorrido en utilizado para determinar el número cromático de un grafo,
profundidad que se utiliza para visitar todos los vértices de un mientras que el algoritmo DFS es utilizado para asignar colores a
grafo. Por otro lado, BFS es un algoritmo de búsqueda en grafos los vértices del grafo. Estos algoritmos son muy eficientes y se han
que explora primero todos los vértices adyacentes al vértice inicial utilizado en muchos campos diferentes, como la programación de
antes de avanzar en profundidad. Es decir, es un algoritmo de horarios, la asignación de frecuencias en redes de comunicaciones,
recorrido en anchura que se utiliza para visitar todos los vértices de la programación de rutas de transporte y la planificación de
un grafo. ensamblajes en la fabricación.
En este artículo, se presentarán implementaciones de ambos Aunque el problema de coloreo de grafos es NP-completo, los
algoritmos en Python y se explicará cómo se pueden utilizar para algoritmos BFS y DFS han sido fundamentales en la resolución de
resolver el problema de coloreo de grafos. Se analizará la muchos casos del problema de manera eficiente. La teoría de grafos
complejidad de cada algoritmo y se mostrarán ejemplos prácticos y la informática teórica siguen siendo un campo activo de
de su aplicación en diferentes problemas de coloreo de grafos. investigación y desarrollo de algoritmos para resolver problemas
cada vez más complejos. Los algoritmos BFS y DFS son solo
En resumen, el problema de coloreo de grafos es un tema algunos de los muchos algoritmos que se han desarrollado en este
importante en la teoría de grafos y tiene aplicaciones prácticas en campo y que continúan siendo utilizados en la actualidad para
diversas áreas. DFS y BFS son algoritmos fundamentales para resolver problemas de coloreo de grafos y otros problemas
resolver este problema, y su implementación en Python puede relacionados con la teoría de grafos.
resultar útil en la resolución de problemas de coloreo de grafos en
diferentes situaciones.
El algoritmo BFS (Breadth-First Search) es un algoritmo que se Ilustración 2: Coloración de vértices para el grafo Petersen
utiliza para recorrer y buscar elementos en un grafo. El algoritmo utilizando tres colores
comienza por el nodo inicial y visita todos los nodos adyacentes
antes de pasar a los nodos más distantes. El algoritmo BFS es CODIGO BFS
utilizado en el problema de coloreo de grafos para determinar el Este código implementa una búsqueda por amplitud (BFS) en un
número cromático de un grafo, que es el número mínimo de colores grafo dado en Python. También muestra cómo dibujar el grafo
que se necesitan para colorear el grafo de manera que ningún utilizando la biblioteca NetworkX y la biblioteca de visualización
vértice adyacente tenga el mismo color. de gráficos matplotlib.
2
Magnetic Normal Modes of Bi-Component Permalloy Structures WOODSTOCK’97, July 2016, El Paso, Texas USA
primer elemento de la cola y lo devuelve, mientras que IsEmpty Después de la definición de la función BFS, se llama a la función
verifica si la cola está vacía. BFS con el grafo dado, el nodo de inicio "A", el nodo de
finalización "D" y la cola path_queue. La distancia calculada
# a sample graph entre el nodo de inicio y el nodo de finalización se almacena en el
graph = {'A': ['B', 'C', 'E'],
'B': ['A', 'C', 'D'], diccionario distances y se imprime en la pantalla.
'C': ['D'],
'D': ['C'],
'E': ['F', 'D'], distances = BFS(graph, "A", "D", path_queue)
'F': ['C']} print("Distances:", distances)
# edges
A continuación, se define la función BFS, que implementa el nx.draw_networkx_edges(G, pos, width=1, arrows=True,
algoritmo BFS en el grafo dado. Esta función toma el grafo, el nodo arrowsize=20, arrowstyle='->')
3
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
'8' : []
}
# Codigo
print("A continuación se muestra el algoritmo DFS")
start_node='5'
distance = {start_node: 0}
dfs(visited, graph, start_node, distance)
# nodes
nx.draw_networkx_nodes(G2, pos,
node_size=500,node_color='#8FBC8F')
4
Magnetic Normal Modes of Bi-Component Permalloy Structures WOODSTOCK’97, July 2016, El Paso, Texas USA
La función "recursive_dfs" es una versión recursiva de la Un objeto de grafo de NetworkX se crea a partir del segundo
función DFS. Toma un grafo, un nodo fuente, una lista de nodos diccionario de grafo "graph2" y se llama "G2", después se define la
visitados y un diccionario de distancias de nodos, y devuelve una posición de los nodos.
lista de nodos visitados y el diccionario de distancias.
# Crear un objeto Graph de NetworkX
G2 = nx.Graph(graph2)
# Aqui inicia el dfs recursivo pos = nx.shell_layout(G2)
def recursive_dfs(graph, source, path=[], distance={}):
if source not in path:
printGraph2(G2, pos, distances)
path.append(source)
if source not in graph:
# Nodo hoja, retroceder
return path, distance
for neighbour in graph[source]:
if neighbour not in distance or
EJECUCIÓN: CODIGO DFS
distance[neighbour] > distance[source] + 1: El código dado implementa dos algoritmos de búsqueda de
distance[neighbour] = distance[source] +
1 # Actualizar la distancia del vecino profundidad primero (DFS) en dos grafos diferentes utilizando la
path, distance = recursive_dfs(graph, biblioteca NetworkX de Python.
neighbour, path, distance)
return path, distance
# edges
nx.draw_networkx_edges(G2, pos,
width=1,arrows=True,arrowsize=20,arrowstyle='->')
5
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
CONCLUSIONES
En conclusión, el problema de coloreo de grafos es un problema
interesante y desafiante en la teoría de grafos, con aplicaciones
prácticas en el mundo real. Tanto el algoritmo de búsqueda en
profundidad (DFS) como el algoritmo de búsqueda en amplitud
(BFS) son importantes en la solución de este problema y en el
análisis de grafos en general. En Python, hay varias bibliotecas
útiles, como NetworkX y Matplotlib, que permiten la visualización
de grafos y la implementación de algoritmos para resolver el
problema de coloreo de grafos, como se muestra en el código
anterior. Además, la recursión es una herramienta poderosa en la
implementación de DFS, como se puede ver en el segundo ejemplo
de código. En resumen, el problema de coloreo de grafos, junto con
DFS y BFS, son conceptos clave en la teoría de grafos y su
aplicación en el mundo real, y Python ofrece herramientas útiles
para su implementación y visualización.
AGRADECIMIENTOS
Nos gustaría expresar nuestro agradecimiento al profesor Fernando
Zacarías Flores de la Benemérita Universidad Autónoma de Puebla
por impartir este interesante tema. Apreciamos su dedicación y
paciencia para guiarnos a través de los conceptos y ejemplos
prácticos, lo que nos permitió comprender mejor los algoritmos y
sus aplicaciones en la resolución de problemas de grafos. Estamos
agradecidos por su valioso tiempo y experiencia compartida con
nosotros.