Ponderados#
Introducción#
Los grafos ponderados son una extensión de los grafos clásicos en los que las aristas (o conexiones) tienen un peso asociado. Este peso puede representar costos, distancias, capacidades u otros valores que cuantifican la relación entre dos nodos. Los grafos ponderados son ampliamente utilizados en problemas de optimización y simulación en diversas áreas como redes, logística y análisis de datos.
En esta clase exploraremos los conceptos fundamentales de los grafos ponderados, sus tipos, aplicaciones y cómo implementarlos en Java, proporcionando ejemplos prácticos que faciliten su comprensión.
Objetivos#
Comprender qué son los grafos ponderados y sus características principales.
Identificar los tipos de grafos ponderados y sus aplicaciones prácticas.
Implementar grafos ponderados en Java, utilizando estructuras de datos adecuadas.
Resolver problemas utilizando algoritmos relacionados con grafos ponderados.
Ejemplos#
Grafo Sencillo#

Figura 81 Ejemplo simple de un grafo con 4 vértices.#
Estados Unidos#

Figura 82 Vuelos entre ciudades de EEUU. Los pesos son las distancias entre las ciudades.#
Colombia#

Figura 83 Ejemplo de grafo ponderado para representar vuelos entre ciudades de Colombia. Los pesos son los precios de los vuelos.#
Representación#
Aristas y Vertices#
// Ejemplo sencillo
String[] vertices_figure;
int[][] edges_figure;
// Ejemplo mapa de EEUU
String[] vertices_USA;
int[][] edges_weighted_USA;
// Ejemplo mapa de Colombia
String[] vertices_COL;
int[][] edges_weighted_COL;
Matriz Adyacente#
0 |
1 |
2 |
3 |
4 |
|
---|---|---|---|---|---|
0 |
null |
2 |
null |
8 |
null |
1 |
2 |
null |
7 |
3 |
null |
2 |
null |
7 |
null |
4 |
5 |
3 |
8 |
3 |
4 |
null |
6 |
4 |
null |
null |
5 |
6 |
null |
// Implementar la matriz adyacente
Lista de Vecinos#

// WeightedEdge.java
Implementación en Java#
Diagrama UML de Clases#

Figura 84 Diagrama de clases para la clase WeightedGraph
.#
Clase WeightedGraph
#
// WeightedEdge.java
// WeightedGraph.java
// TestWeightedGraph.java
Ejercicio#
Taller
Implementar todos los grafos de la sección de ejemplos. Además, crear los diagramas de los árboles utilizando cualquier herramienta de la sección de Visualización.
Conclusiones#
Los grafos ponderados son una herramienta poderosa para modelar problemas complejos que involucran relaciones cuantitativas entre entidades. Comprender su estructura y funcionamiento es esencial para resolver problemas en campos como logística, redes y análisis de datos. Su implementación en Java permite aprovechar estructuras de datos eficientes y algoritmos especializados para optimización y análisis.