Está en la página 1de 6

4.2.

G RAFOS
Estructura de Datos
Ingeniero Julia Guadalupe Trujillo Salamanca
12:00-13:00

Licona Guevara Juan Eduardo


12/01/2015

12-1-2015

4.2. GRAFOS
Un grafo est formado por un conjunto de nodos(o vrtices) y un conjunto de arcos. Cada
arco en un grafo se especifica por un par de nodos. El conjunto de nodos es {A, B, C, D, F, G,
H} y el conjunto de arcos {(A, B), (A, D), (A, C), (C, D), (C, F), (E, G), (A, A)} para el siguiente
grafo:

Este tipo de estructuras de datos se usan para datos que estn relacionados de alguna
manera (relaciones de parentesco, puestos de trabajo); por esta razn se puede decir que los
grafos representan la estructura real de un problema.
Existen los grafos dirigidos y los grafos no dirigidos.
Grafo Dirigido: Es aquel donde los nodos se encuentran ordenados, es decir uno
apunta al otro.
Grafo no Dirigido: Es donde ni los nodos ni los arcos tienen una ruta fija(es decir no
apuntan a nadie), solo estn unidos.
Si los pares de nodos en los arcos dirigidos, el grafo se denomina grafo directo, dirigido o
dgrafo.

4.2.1. TERMINOLOGA DE GRAFOS


o
o
o
o
o
o
o
o
o
o
o
o

Al nmero de nodos del grafo se le llama orden del grafo.


Un grafo nulo es un grafo de orden 0 (cero).
Dos nodos son adyacentes si hay un arco que los une.
En un grafo dirigido, si A es adyacente de B, no necesariamente B es adyacente de
A
Camino es una secuencia de uno o ms arcos que conectan dos nodos.
Un grafo se denomina conectado cuando existe siempre un camino que une dos
nodos cualesquiera y desconectado en caso contrario.
Un grafo es completo cuando cada nodo est conectado con todos y cada uno de los
nodos restantes.
El camino de un nodo as mismo se llama ciclo.
Vrtice: Nodo.
Enlace: Conexin entre dos vrtices (nodos).
Adyacencia: Se dice que dos vrtices son adyacentes si entre ellos hay un enlace
directo.
Vecindad: Conjunto de vrtices adyacentes a otro.

12-1-2015

o
o
o
o

Camino: Conjunto de vrtices que hay que recorrer para llegar desde un nodo origen
hasta un nodo destino.
Grafo conectado: Aqul que tiene camino directo entre todos los nodos.
Grafo dirigido: Aqul cuyos enlaces son unidireccionales e indican hacia donde
estn dirigidos.
Gafo con pesos: Aqul cuyos enlaces tienen asociado un valor. En general en este
tipo de grafos no suele tener sentido que un nodo se apunte a s mismo porque el
coste de este enlace sera nulo.

Al igual que ocurra con el rbol, tambin hay dos formas de representar un grafo en
memoria:
Matricial: Usamos una matriz cuadrada de boolean en la que las filas representan los nodos
origen, y las columnas, los nodos destinos. De esta forma, cada interseccin entre fila y
columna contiene un valor booleano que indica si hay o no conexin entre los nodos a los
que se refiere. Si se trata de un grafo con pesos, en lugar de usar valores booleanos,
usaremos los propios pesos de cada enlace y en caso de que no exista conexin entre dos
nodos, rellenaremos esa casilla con un valor que represente un coste , es decir, con el valor
NaturalLast.
A esta matriz se le llama Matriz de Adyacencia.
Ejemplo: Representacin matricial

OBSERVACIN: En caso de que el grafo sea no dirigido, la matriz resultante es simtrica


respecto a la diagonal principal.
NOTA: La representacin de un grafo mediante una matriz slo es vlida cuando el nmero
de nodos del grafo es fijo.

12-1-2015
Lista de Adyacencia (LA): Se utiliza un vector de tamao n (un elemento por cada vrtice)
donde LA[i] almacena la referencia a una lista de los vrtices adyacentes a i. En una red
esta lista almacenar tambin la longitud de la arista que va desde i al vrtice adyacente.
Existen varias posibilidades a la hora de representar la lista de vrtices: arrays dinmicos,
listas enlazadas o usar una lista de adyacencia aplanada: Se almacenan todas las listas de
manera contigua en un nico vector, VA, de tamao m, y en el vector LA se almacenan
ndices al vector VA. La lista de adyacencia del vrtice i se encuentra en VA[LA[i] ..
LA[i+1]-1]. Esta representacin es til cuando no se vaya a modificar el grafo.

4.2.2. OPERACIONES BSICAS SOBRE


GRAFOS

Creacin.
Insercin.
Bsqueda.
Eliminacin.
ALGORITMO DE CREACION.

repite
si top=NIL entonces new(top)
top(la)NIL
top(ld)NIL
lee(top(dato))
qtop
en caso contrario
new(p)
p(ld)NIL
p(la)NIL
q(la)p
lee(p(dato))
q-p
mensaje(otro vertice ?)
lee(respuesta)
hasta repuesta=no
ptop
mientras p<>NIL haz
mensaje(tiene vrtices adyacentes p(dato) ?)
lee(respuesta)
si respueta=si entonces
repite
new(q)
lee(q(dato))
q(ld)p(ld)
p(ld)q
mensaje(otro vrtice ?)
lee(respuesta2)
hasta respuesta2=no
pp(la)

12-1-2015
ALGORITMO DE INSERCION.
mensaje(valor a insertar ?)
lee(valor_a_insertar)
si top<>NIL entonces
ptop
mientras p(la)<>NIL haz
pp(la)
new(q)
lee(q(dato))
p(la)q
q(la)NIL
mensaje(Hay vrtices adyacentes?)
lee(respuesta)
si respuesta=si entonces
mensaje(Cuantos vrtices?)
lee(nmero_vrtices)
desde i=1 hasta nmero_vrtices haz
new(p)
lee(p(dato))
q(ld)p
qq(ld)
en caso contrario
mensaje(no existe lista)

ALGORITMO DE BUSQUEDA.

mensaje(vrtice a buscar)
lee(vrtice_a_buscar)
ptop
repite
si p(dato)=vrtice_a_buscar entonces
repite
pp(ld)
escribe(p(dato))
hasta p(ld)=NIL
en caso contrario
p(la)
hasta p=NIL

12-1-2015
ALGORITMO DE BORRADO.

mensaje(vrtice a borrar ?)
lee(vrtice_a_borrar)
ptop
rp
qp
swfalso
repite
si p(dato)=vrtice_a_borrar entonces
si p=top entonces
toptop(la)
rtop
swverdadero
en caso contrario
r(la)p(la)
repite
pp(ld)
dispose(q)
qp
hasta p=NIL
si sw=verdadero entonces
pr
qp
en caso contrario
pr(la)
qp
en caso contrario
rp
repite
qp(ld)
si q(dato)=vrtice_a_borrar entonces
p(ld)q(ld)
dispose(q)
qp
en caso contrario
pp(ld)
hasta p=NIL