Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ReporteTectico v4 PDF
ReporteTectico v4 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 Ilustración 1: Diferencias entre BFS y DFS
Problema de Coloreo de Grafos y dos algoritmos de búsqueda en
grafos, DFS y BFS, y mostrar cómo estos algoritmos se pueden DFS es un algoritmo de búsqueda en grafos que funciona
utilizar para resolver el problema de coloreo de grafos. Se explorando tan lejos como sea posible a lo largo de cada rama antes
presentarán implementaciones en Python de estos algoritmos, y se de retroceder. Es decir, se trata de un algoritmo de recorrido en
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
profundidad que se utiliza para visitar todos los vértices de un PROBLEMA DE COLOREO DE GRAFOS
grafo. Por otro lado, BFS es un algoritmo de búsqueda en grafos
El problema de coloreo de grafos es uno de los problemas más
que explora primero todos los vértices adyacentes al vértice inicial
conocidos y estudiados en la teoría de grafos. La idea es asignar un
antes de avanzar en profundidad. Es decir, es un algoritmo de
color a cada vértice de un grafo, de tal manera que los vértices
recorrido en anchura que se utiliza para visitar todos los vértices de
adyacentes tengan colores diferentes. El objetivo es minimizar el
un grafo.
número de colores utilizados para colorear el grafo. Aunque el
problema de coloreo de grafos es NP-completo, se han desarrollado
En este artículo, se presentarán implementaciones de ambos
varios algoritmos que pueden resolver muchos casos del problema
algoritmos en Python y se explicará cómo se pueden utilizar para
de manera eficiente. Entre estos algoritmos se encuentran el BFS y
resolver el problema de coloreo de grafos. Se analizará la
el DFS, dos algoritmos que han sido fundamentales en la resolución
complejidad de cada algoritmo y se mostrarán ejemplos prácticos
de muchos problemas de coloreo de grafos.
de su aplicación en diferentes problemas de coloreo de grafos.
El algoritmo BFS (Breadth-First Search) es un algoritmo que se
En resumen, el problema de coloreo de grafos es un tema
utiliza para recorrer y buscar elementos en un grafo. El algoritmo
importante en la teoría de grafos y tiene aplicaciones prácticas en
comienza por el nodo inicial y visita todos los nodos adyacentes
diversas áreas. DFS y BFS son algoritmos fundamentales para
antes de pasar a los nodos más distantes. El algoritmo BFS es
resolver este problema, y su implementación en Python puede
utilizado en el problema de coloreo de grafos para determinar el
resultar útil en la resolución de problemas de coloreo de grafos en
número cromático de un grafo, que es el número mínimo de colores
diferentes situaciones.
que se necesitan para colorear el grafo de manera que ningún
vértice adyacente tenga el mismo color.
PROBLEMA DE LOS CUATRO COLORES
El teorema de los cuatro colores afirma que, para colorear un mapa El algoritmo DFS (Depth-First Search) es otro algoritmo utilizado
geográfico plano sin que dos países colindantes tengan el mismo en la teoría de grafos para recorrer y buscar elementos en un grafo.
color, basta con cuatro tonos diferentes o menos. El algoritmo comienza en un nodo inicial y explora todo el grafo
Se imponen las siguientes restricciones a los mapas aludidos en el hasta que no hay más nodos por visitar. El algoritmo DFS se utiliza
teorema: en el problema de coloreo de grafos para asignar colores a los
1. Son siempre conexos –es decir, de una pieza– y cada una vértices del grafo. El algoritmo asigna un color al vértice actual y
de sus regiones también es conexa; luego recursivamente asigna colores a todos los vértices
2. Dos territorios distintos de un mapa no pueden tocarse adyacentes. Si el algoritmo encuentra un vértice que no se puede
sólo en un punto, es decir, para ser colindantes deben colorear con el color actual, retrocede y prueba con un color
compartir frontera en el sentido indicado en la figura 1. diferente.
2
Análisis y Diseño de Algoritmos BUAP, marzo 2023, Puebla, Puebla MEXICO
return val
def IsEmpty(self):
result = False
if len(self.holder) == 0:
result = True
return result
3
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
# edges
nx.draw_networkx_edges(G, pos, width=1, arrows=True,
arrowsize=20, arrowstyle='->')
# labels
labels = {node: f"{node}, {distances[node]}" for node
in G.nodes()}
nx.draw_networkx_labels(G, pos, labels, font_size=10,
font_family='cursive')
plt.axis('off')
plt.show()
graph = {
'5' : ['3','7'],
'3' : ['2', '4'],
'7' : ['8'],
'2' : [],
'4' : ['8'],
'8' : []
}
Ilustración 5: Ruta del nodo inicial al nodo final
visited = set() # Configurado para realizar un
Después de llamar a la función BFS, el código dibuja el grafo seguimiento de los nodos visitados del gráfico.
utilizando la biblioteca NetworkX. El tamaño y el color de los
nodos se establecen en la función printGraph, y las etiquetas de la función "dfs" es una función de búsqueda en profundidad que
nodo se establecen en función de la distancia de nodo calculada por recorre el grafo y muestra los nodos visitados y sus distancias desde
BFS. el nodo de inicio. La función actualiza también la distancia del
vecino si su distancia desde el nodo actual es mayor. La función
DFS se llama para el grafo definido anteriormente, comenzando en
el nodo '5' y se muestra en la consola.
4
Análisis y Diseño de Algoritmos BUAP, marzo 2023, Puebla, Puebla MEXICO
5
BUAP, marzo 2023, Puebla, Puebla MEXICO Fernando Zacarias Flores.
6
Análisis y Diseño de Algoritmos BUAP, marzo 2023, Puebla, Puebla MEXICO
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