Vous êtes sur la page 1sur 18

ESTRUCTURA DE DATOS GRAFOS

5.1 Tipo de datos abstracto: Grafo Qu es un Grafo?


Es una red de elementos conectados entre s, un grafo podra explicarse como la red de carreteras de un pas que tienen un conjunto de ciudades conectadas a travs de caminos.

Conceptos
Grafo: Es un conjunto de nodos y arcos o de vrtices y aristas. Nodo o Vrtice: Elemento que almacena la informacin de un grafo. Arco o Arista: Liga que une a dos nodos del grafo. Nodo adyacente: Dos nodos son adyacentes si hay una arista que los conecte. Camino (trayectoria): Secuencia nodos para de ir de un vrtice X a un vrtice Y. Arista Paralela: Dos aristas son paralelas si comparten los mismos vrtices. Arista Incidente o Lazo: Es aquella arista que se dirige al vrtice desde el cual parti. Vrtice Aislado: Es aquel vrtice en el cual no incide ninguna arista. Ciclo: Es el camino donde el vrtice de inicio y el de terminacin son el mismo y no hay aristas repetidas. Camino (trayectoria) Simple: Camino donde el vrtice de inicio es diferente al vrtice de terminacin y no se repite el paso por ningn vrtice. Grado de un vrtice: Cantidad de aristas que inciden sobre ese vrtice. Grado de un grafo: Es el mximo grado que pueden tener sus vrtices, el cual es la cantidad de aristas que inciden en el vrtice. Se representa con la letra delta minscula:

Tipos de Grafos
Grafo simple: Es un grafo sin lazos ni aristas paralelas. Grafo no dirigido: En un grafo no dirigido las aristas no tienen una direccin particular, por lo que si el vrtice A y el vrtice B son adyacentes, es igual ir de A hacia B que de B hacia A. Grafo dirigido (Digrafo): En un dgrafo las aristas tienen una direccin asociada, la primer arista es el origen y la segunda (quien es apuntada por la flecha) es considerada el destino. Grafo completo: Es en el cual existe un camino desde cualquier vrtice hacia todos los dems vrtices del grafo. Grafo Ponderado: Es el grafo en el cual cada arista tiene asignado un peso o valor real no negativo.

Ejemplo 1:
v1 Aa3 v4 v3 Aa1 Aa2 Aa5 Conjunto de Vrtices: V={v1, v2, v3, v4} v2 Aa4 Aa4 v1 Aa2 v2 v1 y v2 son nodos Conjunto de Aristas:

a={a1, a2, a3, a4, a5}

Adyacentes

Este grafo es un grafo Simple Este grafo es un grafo no dirigido Caminos para recorrer de v1 hacia v4 en este grafo: - v1, v2, v4 - v1, v4 - v1, v3, v4 - v1, v2, v1, v4

Ejemplo 2:
v1 Aa2 v2 Este grafo es un grafo dirigido ya que sus aristas estn direccionadas.

Aa1 v4

Aa3

Ejemplo 3:
Aa3 v1 Aa1 Aa2 v4 v3 Aa4 a1 y a2 son aristas paralelas La arista a4 es un lazo El vrtice v4 es un vrtice aislado

v2

Ejemplo 4:
Ciclos: - v1, v2, v3, v4, v5, v1 - v5, v1, v2, v4, v5 - v3, v2, v4, v3 - v1, v2, v3, v4, v2, v1 (no es ciclo ya que se repite la arista a4) Caminos Simples: - v1, v2, v3 - v1, v5, v4, v2, v3 - v1, v2, v4, v3 - v1, v2, v4, v5, v1, v2, v3 (no es un camino simple ya que se repiten los vrtices v1 y v2

Aa1 v2 Aa4 Aa5

v3 Aa3 v4

v1 Aa2 Aa6 v5

Ejemplo 5:
v3 v2 v4 Este grafo es un grafo Completo El grado del grafo: (grafo)= 4. El grado del vrtice v5: (v5)= 4.

v1

v5

Ejemplo 6:
Chihuahua A820 km Coahuila A700 km Durango El grafo es un grafo ponderado ya que cada arista tiene asignado un valor en este caso son kilmetros de distancia.

A550 km

5.2 Estructuras de datos para grafos 5.2.1 Estructura de Matriz de Adyacencias


Una de las representaciones ms sencillas de un grafo es la denominada Matriz de adyacencias que consiste bsicamente en: Un arreglo bidimensional de tamao nxn, donde n es la mxima cantidad de nodos del grafo. Las casillas de la matriz se llenan con verdadero y falso o con 0 y 1 segn exista o no un arista que conecte a los 2 nodos involucrados Para el caso de los grafos no dirigidos, la matriz ser simtrica, sin embargo esto no ocurre en los dgrafos donde se debe considerar la direccin explicita de cada uno arcos. Para el caso de los grafos ponderados, la matriz se puede llenar con el peso asociado a cada una de las aristas.
Ejemplos: #1.- Grafo no dirigido Matriz de Adyacencias

A
A D

B 0 1 1 1 0

C 1 1 0 0 0

D 1 1 0 0 1

E 1 0 0 1 0

A B

0 0 1 1 1

C E

C D E

#2.- Grafo dirigido (Digrafo)

Matriz de Adyacencias

A
A D

B 0 1 1 1 0

C 0 0 0 0 0

D 1 0 0 0 1

E 1 0 0 0 0

A B

0 0 1 0 0

C E

C D E

5.2.2 Estructura de Lista de adyacencias


Consiste en definir una lista encadenada de nodos y a cada uno de ellos enlazarlos con su lista de nodos adyacentes. La idea es la similar a la matriz de adyacencias pero se busca ahorrar un poco de espacio en la memoria al no definir las casillas para nodos que no tienen arcos.

Nodo

Apuntador al nodo adyacente

Apuntador al siguiente nodo adyacente Ejemplos: #1.- Grafo no dirigido Lista de Adyacencias

A B C D E

C C A A A

D D B B D

C E

#2.- Grafo dirigido (Digrafo)

Lista de Adyacencias

A
A D

B
C E B

C D E

A B D

5.2.3 Estructura de lista de arcos/aristas


Se usa preferentemente en los dgrafos (grafos dirigidos). En esta representacin se mantiene una lista de nodos (al igual que en la lista de adyacencias) pero en lugar de almacenar los nodos vecinos, se crea una lista para cada una de las aristas para cada nodo, en el cual se mantiene la informacin necesaria para determinar cual nodo es el origen de la arista y cul es el destino. En esta estructura se minimiza el desperdicio de espacio en memoria pero el grado de complejidad crece a medida que se aumenta la cantidad de nodos

Nodo

Apuntador al arco donde el nodo es origen Apuntador al arco donde el nodo es destino

Apuntador al siguiente nodo adyacente

Ejemplo:

C E

A B C D E

A-D

A-E

C-A D-B E-D

C-B

5.3 Recorridos de un Grafo


Una de las operaciones bsicas en el manejo de grafos es su recorrido, existen diferentes algoritmos para realizar esa operacin. Dos mtodos conocidos son el de Bsqueda en Profundidad y el de Bsqueda en Anchura. En ambos casos, debido a que es posible visitar el nodo ms de una vez, es necesario marcar el nodo visitado como tal.

5.3.1 Bsqueda en profundidad


El algoritmo se puede plantear de forma recursiva tomando como punto de partida el nodo i, (nodo con la menor informacin) visitndolo, marcndolo como visitado y seguir con los sucesores del nodo i usando la bsqueda en profundidad para visitarlos y marcarlos continuando recursivamente. Para manejar este algoritmo se utilizara una pila para guardar los nodos antes de ser visitados y una Lista para guardarlos una vez visitados.

Ejemplo:

3 2 4

Algoritmo de la Bsqueda en Profundidad explicada con el grafo anterior: 1. El recorrido comenzara con el nodo 1 (N1). 2. Insertar N1 en la pila de nodos sin visitar. Pila de nodos sin visitar Lista de nodos Visitados Inicio

TOPE

N1

3. Sale N1 de la pila, se visita y se coloca en la lista de nodos visitados. (El algoritmo termina en el momento en que se vayan a sacar nodos de la pila y esta se encuentre vaca).

Pila de nodos sin visitar

3 2 4

Lista de nodos Visitados Inicio

N1

1
Visitado TOPE

4. Se insertan en la pila los nodos sucesores de N1, respetando su orden. Pila de nodos sin visitar Lista de nodos Visitados Inicio

TOPE

N5 N4 N2

N1

5. Sale de la Pila N5, se visita y se verifica que no est en la lista de nodos ya visitados, si no lo esta se inserta en ella. Pila de nodos sin visitar

3 2 4

Lista de nodos Visitados Inicio

N1 TOPE N4 N2

N5

1
Visitado

5
Visitado Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

6. Se agregan los sucesores de N5 a la Pila, en este caso solo tiene uno el cual es N4. Pila de nodos sin visitar Lista de nodos Visitados Inicio

TOPE

N4 N4 N2

N1

N5

7. Sale N4 de la Pila, se visita y se verifica que no est en la lista de nodos visitados, N4 no est en la lista por lo tanto se puede agregar a ella.

3
Pila de nodos sin visitar Lista de nodos Visitados

Inicio

N1 TOPE N4 N2

N5

N4

1
Visitado

5
Visitado Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

8. En el caso de N4 no tiene sucesores por lo tanto la pila no se modifica en este paso. 9. Sale el siguiente elemento de la Pila, ahora es N4, se visita y se verifica si ya est en la pila de nodos visitados, en este caso s lo est por lo tanto no se incluye otra vez en la Lista ni se agregan sus sucesores en la Pila.

3
Pila de nodos sin visitar Lista de nodos Visitados Inicio

N1

N5

N4

1
TOPE N2 Visitado

5
Visitado Ultimo nodo visitado antes de este paso

10. Sale N2 de la pila, se visita y se verifica si se encuentra en la lista de nodos visitados, si no lo est, se agrega a dicha lista.

3
Pila de nodos sin visitar Lista de nodos Visitados

Inicio

N1

N5

N4

N2

1
TOPE Visitado

5
Visitado Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

11. Se agregan los sucesores de N2 (los cuales son N3 y N5) a la Pila de nodos sin vistar. Pila de nodos sin visitar Lista de nodos Visitados Inicio

N1 TOPE N5 N3

N5

N4

N2

12. Sale N5 de la Pila, se visita y se verifica si se encuentra en la lista de nodos visitados, N5 ya est en la lista por lo tanto no se agrega de nuevo, ni sus sucesores se agregan a la pila de nodos sin visitar.

3
Pila de nodos sin visitar Lista de nodos Visitados

Inicio

N1

N5

N4

N2

1
TOPE N3 Visitado

5
Visitado Ultimo nodo visitado antes de este paso

13. Sale N3 de la Pila, se visita y se verifica que no se encuentre en la lista de nodos visitados, N3 no esta en la lista por lo tanto puede agregarse.

3
Pila de nodos sin visitar Lista de nodos Visitados

Inicio

N1

N5

N4

N2

N3

1
Visitado TOPE

5
Visitado Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

14. Se agrega N4 a la pila ya que es el nico sucesor de N3. Pila de nodos sin visitar Lista de nodos Visitados Inicio

N1 TOPE

N5

N4

N2

N3

N4

15. Sale N4 de la Pila, se visita y se verifica que no est en la lista de nodos visitados, N4 ya est en la lista por lo tanto no se puede agregar. Lista de nodos Visitados

3
Pila de nodos sin visitar Inicio

4
N1 N5 N4 N2 N3

1
TOPE Visitado

5
Visitado

Ultimo nodo visitado antes de este paso

16. Ya no hay nodos en la Pila, por lo tanto el algoritmo termina teniendo en la lista de nodos visitados el resultado del recorrido en profundidad. Pila de nodos sin visitar Lista de nodos Visitados Inicio

N1

N5

N4

N2

N3

BUSQUEDA EN PROFUNDIDAD
TOPE

3 2 4

5.3.2 Bsqueda en Anchura


En este mtodo se parte del nodo i (nodo con menor informacin), visitndolo, marcndolo como visitado y luego se realiza el mismo mtodo con los nodos sucesores del nodo i continuando recursivamente. Se examina si todos los nodos fueron visitados y si no selecciona uno de los nodos que falta visitar y se contina con el proceso hasta que todos los nodos se hayan visitado. Para manejar este algoritmo se utilizara una Fila para guardar los nodos antes de ser visitados y una Lista para guardarlos una vez visitados.

Ejemplo:

3 2 4

Algoritmo de la Bsqueda en Profundidad explicada con el grafo anterior: 1. El recorrido comenzara con el nodo 1 (N1). 2. Insertar N1 en la lista de nodos sin visitar. Fila de nodos sin visitar Inicio Fin Inicio Lista de nodos Visitados

N1

3. Sale N1 de la Fila, se visita y se coloca en la lista de nodos visitados. (El algoritmo termina en el momento en que se vayan a sacar nodos de la Fila y esta se encuentre vaca).

Fila de nodos sin visitar Inicio Fin

3 2 4

Lista de nodos Visitados Inicio

N1

1
Visitado

4. Se insertan en la Fila los nodos adyacentes de N1, respetando su orden. Lista de nodos Visitados Inicio

Fila de nodos sin visitar Inicio Fin

N2

N4

N5

N1

5. Sale de la Fila N2, se visita y se verifica que no est en la lista de nodos ya visitados, y como no lo est, se inserta en ella.

3
Visitado Fila de nodos sin visitar Inicio Fin

Lista de nodos Visitados

Inicio

N1 N4 N5

N2

1
Visitado

5
Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

6. Se agregan los nodos sucesores de N2 a la Fila, en este caso son N3 y N5. Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados Inicio

N4

N5

N3

N5

N1

N2

7. Sale N4 de la fila, se visita y se verifica que no est en la lista de nodos visitados, N4 no est en la lista por lo tanto se puede agregar a ella.

3
Lista de nodos Visitados Fila de nodos sin visitar Inicio Fin N1 N5 N3 N5 N2 N4

Inicio

1
Visitado

5
Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

8. En el caso de N4 no tiene sucesores por lo tanto la Fila no se modifica en este paso. 9. Sale el siguiente elemento de la Fila, ahora es N5, se visita y se verifica si ya est en la pila de nodos visitados, N5 no est en la Lista por lo tanto puede agregarse.

3
Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados Inicio

N3

N5

N1

N2

N4

N5

1
Visitado

5
Ultimo nodo visitado antes de este paso Nodo agregado en este paso.

10. Se agregan los nodos sucesores de N5 a la Fila, en este caso solo tiene uno: N4. Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados Inicio

N3

N5

N4

N1

N2

N4

N5

11. Sale N3 de la Fila, se visita y se verifica si se encuentra en la lista de nodos visitados: N3 no est en la lista por lo tanto se agrega. Lista de nodos Visitados

3
Fila de nodos sin visitar Inicio Fin Inicio

N1

N2

N4

N5

N3

N5

N4

Ultimo nodo visitado antes de este paso

Nodo agregado en este paso.

12. Se agregan los nodos sucesores de N3 a la Fila, en este caso solo tiene uno: N4. Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados Inicio

N5

N4

N4

N1

N2

N4

N5

N3

13. Sale N5 de la Fila, se visita y se verifica si se encuentra en la lista de nodos visitados, N5 ya est en la lista por lo tanto no se agrega de nuevo, ni sus sucesores se agregan a la Fila de nodos sin visitar.

3
Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados

Inicio

N4

N4 N1 N2 N4 N5 N3

1
Visitado

5
Visitado Ultimo nodo visitado antes de este paso

14. Sale N4 de la Fila, se visita y se verifica si se encuentra en la lista de nodos visitados, N4 ya est en la lista por lo tanto no se agrega de nuevo.

3
Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados

Inicio

N4 N1 N2 N4 N5 N3

1
Visitado

5
Visitado Ultimo nodo visitado antes de este paso

15. Sale N4 de la Fila, se visita y se verifica si se encuentra en la lista de nodos visitados, N4 ya est en la lista por lo tanto no se agrega de nuevo.

3
Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados

Inicio

N1

N2

N4

N5

N3

1
Visitado

5
Visitado Ultimo nodo visitado antes de este paso

16. La Fila ya no contiene nodos lo que significa que todos fueron visitados, en la lista de nodos visitados se encuentra la Bsqueda en Anchura Fila de nodos sin visitar Inicio Fin Lista de nodos Visitados Inicio

3 2 4

N1

N2

N4

N5

N3

BUSQUEDA EN ANCHURA

Vous aimerez peut-être aussi