2. Programación Dinámica
1
Tabla de contenido.
Grafos…………………………………………….. 2
Clasificación de grafo……………………… 3
Grafos-arboles………………………………… 7
Caminos…………………………………………. 8
Ejercicios………………………………………. 9
3. Programación Dinámica
2
Grafos
En matemáticas y ciencias de la
computación, un grafo es un
conjunto de objetos llamados
vértices o nodos unidos por
enlaces llamados aristas o arcos,
que permiten representar
relaciones binarias entre
elementos de un conjunto.? Son
objeto de estudio de la teoría de
grafos.
Típicamente, un grafo se
representa gráficamente como un
conjunto de puntos (vértices o
nodos) unidos por líneas (aristas).
Desde un punto de vista práctico,
los grafos permiten estudiar las
interrelaciones entre unidades que
interactúan unas con otras. Por
ejemplo, una red de computadoras
puede representarse y estudiarse
mediante un grafo, en el cual los
vértices representan terminales y
las aristas representan conexiones
(las cuales, a su vez, pueden ser
cables o conexiones inalámbricas).
Ejemplo de grafo
Ubicación de Nodos y Arista
4. Programación Dinámica
3
Clasificación de grafo
Grafo dirigido. Llamado también dígrafo
tienen un conjunto de vértices V (nodos)
y un conjunto de aristas E (arcos o
lados), tal que cada arista se asocia a
un par ordenado de vértices.
Grafo no dirigido. Tienen un
conjunto de aristas E (arcos o
lados), tal que cada arista se
asocia a un par no ordenado de
vértices.
Grafo pesado, ponderado ó etiquetado.
Un grafo es pesado cuando sus aristas
contienen datos (etiquetas). Una
etiqueta puede ser un nombre, costo ó
un valor de cualquier tipo de dato.
También a este grafo se le denomina red
de actividades, y el número asociado al
arco se le denomina factor de peso.
5. Programación Dinámica
4
Grafos Isomorfos. Dos grafos son
isomorfos cuando existe una
correspondencia biunívoca (uno a
uno), entre sus vértices de tal forma
que dos de estos quedan unidos por
una arista en común.
Grafo nulo. Se dice que un
grafo es nulo cuando los
vértices que lo componen
no están conectados, esto
es, que son vértices
aislados.
Grafo regular. Aquel con el
mismo grado en todos los
vértices. Si ese grado es k
lo llamaremos k-regular.
Clasificación de grafo
6. Programación Dinámica
5
Grafo bipartito. Es aquel con
cuyos vértices pueden
formarse dos conjuntos
disjuntos de modo que no
haya adyacencias entre
vértices pertenecientes al
mismo conjunto.
Grafo completo. Aquel con
una arista entre cada par de
vértices. Es decir desde
cualquier vértice podemos
encontrar un camino hacia
otro vértice con solo recorrer
una arista.
Grafos Platónicos. Son los
Grafos formados por los
vértices y aristas de sólidos
regulares (Sólidos Platónicos),
como el tetraedro, el cubo, el
octaedro, el dodecaedro, el
icosaedro, etc.
Clasificación de grafo
7. Programación Dinámica
6
Clasificación de grafo
Grafos conexos. Un grafo se
puede definir como conexo si
cualquier vértice V pertenece
al conjunto de vértices y es
alcanzable por algún otro. Otra
definición que dejaría esto más
claro sería: “un grafo conexo es
un grafo no dirigido de modo
que para cualquier par de
nodos existe al menos un
camino que los une” (un grafo
completo es conexo).
Grafo conectado. Aquel
que no tenga una
discontinuidad.
Grafo no conectado. Aquel
que contiene una
discontinuidad.
8. Programación Dinámica
7Grafos-arboles
ÁRBOLES
Un árbol se define como
un tipo de grafo que no
contiene ciclos, es decir
es un grafo también a
cíclico, pero a su vez es
conexo.
BOSQUES DE ÁRBOLES.
Los bosques de árboles son un
caso similar a los árboles, son a
cíclicos, pero no son conexos.
RECORRIDO DE UN GRAFO.
Recorrer un grafo significa
tratar de alcanzar todos los
nodos que estén relacionados
con uno que llamaremos
nodo de salida. Las dos
principales técnicas para
recorrerlo son: recorrido en
anchura y recorrido en
profundidad.
9. Programación Dinámica
8
Caminos
Camino. Es un conjunto de vértices y aristas
que parten de un vértice y llevan a otro
vértice (una sucesión de vértices y aristas,
una ruta).
Longitud de camino. Es el
número de arcos o aristas en
ese camino.
Camino simple. Es cuando
todos sus vértices, excepto tal
vez el primero y el último son
distintos.
Ciclo simple. Es un camino simple
de longitud por lo menos de uno
que empieza y termina en el mismo
vértice.
10. Programación Dinámica
9
Ejercicio 1
Se dispone de una matriz M de tamaño FxC (F es la cantidad de filas y C
la cantidad de columnas), cuyas celdas están vacías. Dos jugadores
(denominados BLANCO y NEGRO) ven rellenando el tablero con piezas
de su color respectivo, siguiendo estas reglas de juego:
• Los jugadores se alternan en el orden de poner sus piezas, empezando
el jugador BLANCO.
• Cuando le toca a un jugador, escoge una casilla que todavía esté vacía
y pone una ficha de su color. Todas las piezas del otro jugador que estén
adyacentes (en horizontal, vertical o diagonal) se cambian de color.
• Si tras una jugada el tablero está lleno, el juego termina y gana el
jugador que más piezas de su color tenga en el tablero. Diseñar un
algoritmo que, usando los métodos de los Grafos de Juego, genere el
grafo de juego para el jugador BLANCO indicando las estructuras de
datos usadas.
12. Programación Dinámica
11
Ejercicio 2
Se tiene el siguiente juego para dos jugadores, llamados AZUL y ROJO: se dispone de una matriz M
de tamaño FxC donde F y C son números pares, y formada por celdas con valores entero positivos
que representan los puntos del juego. El objetivo es conseguir la mayor cantidad de puntos,
atendiendo las siguientes reglas:
• Los jugadores se alternan en el orden de escoger casillas.
• El jugador AZUL escoge cualquier casilla del tablero.
• Tras el primer movimento, el juego se desarrolla como sigue: o Si le toca al jugador AZUL, tiene
que coger una casilla libre en la misma fila que la última jugada del jugador ROJO. o Si le toca al
jugador ROJO, tiene que coger una casilla libre en la misma columna que la última jugada del
jugador AZUL.
• Cuando un jugador toma una casilla, se anota tantos puntos como el valor de la misma, y la casilla
deja de estar disponible para los dos jugadores.
• Si un jugador no tiene ninguna casilla disponible (no necesariamente porque el tablero esté vacío)
el juego termina.
• Cuando se termina el juego, gana el jugador que más puntos tenga. Diseñar un algoritmo que,
permita obtener la mejor forma de jugar para el jugador AZUL (se supone que los jugadores toman
decisiones de manera óptima), indicando las estructuras de datos usadas.