ReporteTectico v2 PDF
ReporteTectico v2 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
[email protected] [email protected] [email protected]
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
Análisis y Diseño de Algoritmos BUAP, marzo 2023, Puebla, Puebla MEXICO
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.
# Codigo
print("A continuación se muestra el algoritmo DFS")
start_node='5'
distance = {start_node: 0}
dfs(visited, graph, start_node, distance)
# nodes
Ilustración 4: Grafo final nx.draw_networkx_nodes(G2, pos,
node_size=500,node_color='#8FBC8F')
4
Análisis y Diseño de Algoritmos BUAP, marzo 2023, Puebla, Puebla MEXICO
# edges
nx.draw_networkx_edges(G2, pos,
width=1,arrows=True,arrowsize=20,arrowstyle='->')
5
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
El segundo grafo se define como otro diccionario de listas de return path, distance
for neighbour in graph[source]:
adyacencia. Luego, se ejecuta una implementación recursiva de if neighbour not in distance or
DFS desde el nodo "A" en el grafo y se imprimen los nodos distance[neighbour] > distance[source] + 1:
distance[neighbour] = distance[source] +
visitados junto con sus distancias desde el nodo de inicio. La 1 # Actualizar la distancia del vecino
función printGraph2() también se utiliza para mostrar el grafo path, distance = recursive_dfs(graph,
neighbour, path, distance)
resultante en pantalla. return path, distance
6
Análisis y Diseño de Algoritmos BUAP, marzo 2023, Puebla, Puebla MEXICO
AGRADECIMIENTOS
EJECUCIÓN: CODIGO COLOREADO DE Nos gustaría expresar nuestro agradecimiento al profesor Fernando
__________ GRAFO Zacarías Flores de la Benemérita Universidad Autónoma de Puebla
Al ejecutar el código se definirá y dibujará el grafo graph2, se por impartir este interesante tema. Apreciamos su dedicación y
calcularán las distancias desde el nodo "A" a todos los demás nodos paciencia para guiarnos a través de los conceptos y ejemplos
utilizando una función de búsqueda en profundidad prácticos, lo que nos permitió comprender mejor los algoritmos y
(recursive_dfs), y se colorearán los nodos utilizando una sus aplicaciones en la resolución de problemas de grafos. Estamos
función de coloreo (color_nodes). Luego se llamará a la agradecidos por su valioso tiempo y experiencia compartida con
función printGraph2 para dibujar el grafo con los nodos coloreados nosotros.
según el algoritmo de coloreo utilizado.
7
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
REFERENCIAS
DECSAI, Departamento de Ciencias de la Computación e I.A. (s. f.).
Algoritmos greedy sobre grafos. Recuperado 27 de febrero de 2023, de
https://elvex.ugr.es/decsai/algorithms/slides/problems/Greedy%20Graph%
20Algorithms.pdf