SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Downloaden Sie, um offline zu lesen
PNFSI

  Asignatura: Desarrollo de Software

  Tema: Grafos




Ing. Zamantha González                 Abril, 2008
Tema 4: Grafos
Contenido
• Definición de grafo.
• Operaciones sobre grafos.
• Representación matricial de grafos en un lenguaje
  de programación.
• Grafos (representación enlazada)
• Operaciones sobre grafos representados de
  manera enlazada.
• Representación enlazada de grafos en un
  lenguaje de programación
Objetivos
Conozcan las estructuras de datos arbóreas y las
formas de trabajar con ellas en la solución de
problemas de mediana complejidad
Introducción

Estructuras de datos estudiadas:

Listas lineales y sus variantes.

Las relaciones entre los nodos de información son
lineales.
   •Todos los nodos tienen un único antecesor,
   excepto el primero que no tiene antecesor.

  •Todos los nodos tienen un único sucesor, excepto
  el último que no tiene sucesor.
Introducción
Estructuras de datos estudiadas:

Los árboles y sus variantes
Cuando se está en presencia de relaciones no
lineales de tipo jerárquica, se utilizan los árboles.

 • Un nodo puede tener más de un sucesor.
 • Se puede establecer un camino único desde el
 nodo raíz hasta un nodo cualquiera del árbol.
 • Cada nodo tiene un único padre, exceptuando al
 nodo raíz del árbol, que no tiene padre.
Introducción
En ocasiones, incluso, se requiere tener acceso a un
nodo determinado a partir de más de un nodo de la
estructura. Existen varios caminos entre un nodo y
otro.

Ejemplo:
• Una red hidráulica,
• Caminos entre ciudades,
• Afinidad entre miembros de un colectivo, entre
otros.
Introducción


               Ciudad B
Ciudad A                            Ciudad D

                 Ciudad C
   Ciudad F
                                       Ciudad E


           Caminos entre ciudades
Definición de Árbol
Un árbol (tree) es un T.D.A. que consta de un
conjunto finito T de nodos y una relación R
(paternidad) entre los nodos tal que:
• Hay un nodo, especialmente designado, llamado la
raíz del árbol T.
                                 A

                            B           C


                        D       E   F       G
Definición de Árbol

• Los nodos restantes, excluyendo la raíz, son
particionados en m (m  0) conjuntos disjuntos T1,
T2, ..., Tm, cada uno de los cuales es, a su vez, un
árbol, llamado subárbol de la raíz del árbol T.

                                   A

                           B               C


                       D       E       F       G
Definición de Árbol
• A los nodos que no son raíces de otros subárboles
se les denomina hojas del árbol T, o sea, no tienen
sucesores o hijos.

                     A

             B               C


         D       E       F       G
Grafos
Un grafo (en inglés graph) es un T.D.A. que
representa un conjunto finito N de nodos, llamados
vértices, relacionados entre sí por un conjunto R de
arcos.

Grafo con 5 vértices y 6 arcos.           A
                                                      B
• Vértices del Grafo
 N ={ A, B, C, D, E }                 C
                                                      D
                                              E
• Arcos del Grafo
 R={(A, A), (A, B), (A, D), (A, C), (D, C), (C, E)}
Grafos: Aclaraciones
•Si el conjunto N es vacío, el grafo será vacío.

• Cada arco de un grafo establece una única relación
entre dos vértices.

• No existe restricción en la relación que establece
un arco, o sea, un vértice puede estar relacionado
consigo mismo o con otro vértice.

• Cada arco se representa a través de un par, donde
cada elemento determina uno de los vértices.
Observación
Dado que no hay restricciones en cuanto a los arcos
de un grafo, todas las estructuras vistas con
anterioridad pueden ser consideradas como un
grafo.

Ejemplo, una lista lineal puede ser vista como un
grafo donde cada nodo está relacionado con
exactamente un nodo distinto de él.
Clasificación de los Grafos
Un grafo es no orientado o no dirigido (en inglés
not directed o not oriented graph) si el hecho de
que el arco (Nj, Nk) pertenezca a R implica que el
arco (Nk, Nj) pertenece a R, para todo j y k.


• Es irrelevante el sentido de las saetas en los arcos
• Al representarlos, los arcos se grafican sin saeta.
• El arco que los relaciona aparece una sola vez en
el conjunto R de arcos del grafo.

Si el grafo es no orientado, al arco se le llama arista.
Clasificación de los Grafos
Un grafo es orientado o dirigido (en inglés:
oriented graph o directed graph) si el hecho de
que el arco (Nj, Nk) pertenezca a R no implica que el
arco (Nk, Nj) pertenece también a R, para todo j y k.

• El sentido de las saetas en los arcos es importante.
• Es importante la dirección del arco, o sea, el vértice
origen del arco y el vértice destino.
• El hecho que exista un arco de Nj a Nk no implica
que exista de Nk a Nj.

Se conocen como digrafos (en inglés: digraph).
Clasificación de los Grafos


    A                         A
            B                         B

C                         C
            D                         D
        E                         E

Grafo No Orientado       Grafo Orientado o
   o No Dirigido              Dirigido
Adyacencia
El vértice n es adyacente al m, si existe un arco o
arista de m a n.
                       Adyacencia:
       A               • B es adyacente a A
               B
                       • D es adyacente a A
   C
               D       • C es adyacente a A
           E
                       • A es adyacente a A
                       • C es adyacente a D
                       • E es adyacente a C
Incidencia
El vértice n es incidente al arco o arista x, si n es
uno de los vértices relacionados con el arco o arista
x. Del mismo modo, se dice que el arco o arista x es
incidente al vértice n.
 .
Así, todos los arcos que llegan o salen de un nodo
son incidentes a él

      A                 Incidencia:
               B
                        • B es incidente al arco (A,B)
  C
              D         • (A,B) es incidente a B
          E
Grado de un Vértice


    A               Sobre el Vértice D:
            B
                    • Grado de Entrada: 3
        D
                    • Grado de Salida: 2
C               F
                    • Grado del Nodo: 5
        E
Grado de un Vértice
El grado de un vértice n es el número de arcos
incidentes a él.

En el caso de los grafos orientados, el grado de
entrada de un vértice n es el número de arcos que
llegan a él y el grado de salida de un vértice n es el
número de arcos que salen de él.

Por lo tanto, el grado de un vértice es la suma de
los grados de entrada y de salida del vértice.
Ponderando arcos y vértices
En muchas aplicaciones resulta de interés asignar
valores de ponderación, también llamados pesos,
a los arcos o a los vértices, obteniéndose así:

• Grafos ponderados por los arcos

• Grafos ponderados por los vértices
Ejemplo: Grafo ponderado por los arcos

Problema del agente viajero

Un agente necesita repartir paquetes en diferentes
ciudades. Se sabe en qué ciudades el agente debe
repartir los paquetes, así como la distancia entre
cada ciudad y las otras.

El problema consiste en saber cuál es la mejor ruta a
seguir por el agente para repartir todos los paquetes.
Ejemplo: Grafo ponderado por los arcos

El problema se puede modelar con un grafo, donde:
• Las ciudades son vértices.
• Los caminos entre las ciudades son arcos.

Si para todas las ciudades se cumple que la
distancia entre una ciudad origen y una ciudad
destino y la distancia de la ciudad destino a la ciudad
origen es la misma, entonces, se puede utilizar un
grafo no orientado.

Podemos ponderar los arcos con la distancia que
existe entre las ciudades.
Ejemplo: Grafo ponderado por los arcos

El agente debe visitar tres ciudades A, B y C,
partiendo de la ciudad A. Entre las ciudades A y B
hay 50 km, entre las ciudades B y C hay 20 km y
entre las ciudades A y C hay 15 km.

       50 Km
 A             B
                      Caminos:
       C              A-B-C: 70 Km
                      A-C-B: 35 Km

El camino más corto es de A a C y de C a B.
Ejemplo: Grafo ponderado por los vértices

Se tiene una secuencia de actividades, de las que se
conoce su duración y se quiere saber, en un
momento dado, en qué orden debieran realizarse, de
forma tal que se realicen primero las de menor
duración.

• Las actividades se pueden representar por los
vértices de un grafo no orientado.

• En cada vértice se puede almacenar la duración de
la actividad como factor de ponderación.
Ejemplo: Grafo ponderado por los vértices



                A              B
                10            25
                       C
                       20




Resulta más conveniente realizar la actividad A,
luego la C y, por último, la B.
Camino entre vértices
Existe un camino de longitud k desde el vértice A
al B, si existe una secuencia de k+1 vértices n1, n2,
..., nk+1, donde n1 = A, nk+1 = B y (ni, ni+1) son
adyacentes para todo i entre 1 y k.
En un grafo no orientado, al camino se le llama
cadena.
                       Caminos entre los vértices A y C:
       A               Camino de longitud 1: (A,C)
                 B
                       Camino de longitud 2: (A,D,C)
   C
                D      Camino de longitud 2: (A,A,C)
           E
                       Camino de longitud 3: (A,A,D,C)
Ejemplo: Camino entre nodos
¿Existe un camino de longitud mayor que 1 entre los
vértices C y B?

                   A
                            B

               C
                           D


 • Camino de longitud 3: (C, B, A, B)
 • Camino de longitud 4: (C, B, A, C, B)
Camino simple
Entre dos vértices existe un camino simple si todos
los vértices, excepto posiblemente el primero y el
último, son distintos dos a dos.
O sea, un camino simple es aquel en el que no se
repiten los arcos.
                          Ejemplo:
      A                   (A, B, D)
               B
                          (A, B, A, C)
  C
              D
Camino simple
Un ciclo, o también circuito, es un camino simple
de cualquier longitud de un vértice a sí mismo. Si el
ciclo es de longitud 1, entonces se denomina bucle o
lazo.


       A                   Ejemplo:
               B
                           Ciclo: A,D,C,A
                           Bucle: A,A
   C
               D
           E
Grafo cíclico y acíclico
Si un grafo contiene al menos un ciclo se llama
cíclico.

Un grafo acíclico es aquel que no tiene ningún
circuito o ciclo.

       A                             A
                B                             B

   C                             C
               D                             D
                                         E

   Grafo cíclico                  Grafo acíclico
Operaciones sobre Grafos

• Construir un grafo dada la información de sus
 vértices. (Convenio: se crea inicialmente vacío).
• Verificar si un grafo está vacío o no.
• Insertar vértices y arcos.
• Eliminar vértices y arcos.
• Dados dos vértices, determinar si son adyacentes.
• Dado un vértice, determinar cuáles vértices son
 adyacentes a él.
Operaciones sobre Grafos

• Dados dos vértices, determinar un camino de
 longitud k entre ellos.
• Dado un arco, determinar vértices incidentes a él.
• Determinar si el grafo es cíclico.
Representación matricial de Grafos

• La representación matricial permite establecer si
hay relación entre cada vértice del grafo y los
demás.

• Para ello, se utiliza una matriz cuadrada.

• Se utiliza un arreglo bidimensional.

• Esto significa que la representación matricial es
una representación secuencial.
Representación matricial de Grafos

            B           A

                    C
                                D

                            E

A partir de un grafo, siempre es posible definir un
orden arbitrario de los vértices.

 A    B   C     D       E
 0    1   2     3       4
Matriz de Adyacencia

La matriz de adyacencia representa para cada
nodo cuáles son sus vértices adyacentes.

• Cada fila y cada columna de la matriz se
corresponde con un vértice en particular.
• Los elementos de la matriz son booleanos
• Si el elemento (i, j) es verdadero, existe un arco
que va del vértice i al vértice j y, si el elemento (i, j)
es falso, no existe arco del vértice i al vértice j.
• Si el grafo es no orientado, si existe el arco del
vértice i al vértice j existe el arco del vértice j al
vértice i.
Representación matricial de Grafos
                               Vértices

B         A                     A    B    C   D   E
                                0    1    2   3   4
      C
                  D             0    1    2   3   4
                           0    0    0    1   1   0
              E
                           1    0    0    1   0   0
    Matriz de Adyacencia   2    0    0    0   1   1
                           3    0    0    0   0   1
                           4    0    0    0   1   0
Implementación en C++
class TVertex
{
private:
  void* aInfo;
public:
  TVertex(void* pInfo) : aInfo(pInfo){}
  void* Info(){return aInfo;}
};
Implementación en C++
class TSeqGraph
{
private:
  bool** aAdjacent;
  bool aDirected;
  int aOrder;
  TGSeqList* aVertexList;
public:
  TSeqGraph(int, bool);
  ~TSeqGraph();
  TGSeqList* Adjacents(int);
  bool AreAdjacents(int, int);
  bool Cyclic();
  int Degree(int);
  … };
Implementación en C++
class TSeqGraph
{
public:
  …
  bool DeleteEdge(int, int);
  bool DeleteVertex(int);
  bool Directed() {return aDirected;}
  bool Empty(){return aVertexList->Empty();}
  bool InsertEdge(int, int);
  bool InsertVertex(void*);
  bool IsEdge(int, int);
  bool IsPathWithLength(int, int, int);
  int Order() {return aOrder;}
  TGSeqList* VertexList(){return aVertexList;}
};
Problemas

La representación de la matriz de adyacencia de
un grafo exige conocer por adelantado la cantidad
de vértices del grafo.

Esta representación no es suficientemente flexible
cuando la cantidad de vértices varía con relativa
frecuencia o cuando la estructura del grafo cambia
durante la ejecución de la aplicación que lo usa.
Esto implica crear la matriz cada vez que se inserte
o elimine un nuevo vértice.

Problema: Solución costosa en tiempo y recursos.
Representación enlazada de Grafos
 Problemas                            B      A
Variante 1:
 • Es difícil saber cuántos arcos
 llegan a un vértice.
Una lista de vértices y cada uno tiene     C
 • Se repite los vértices adyacentes a él.           D
una lista de la información del
 vértice
                                                 E

 A        C       D     • Las     listas  pueden   ser
 B        C             indistintamente secuenciales o
                        enlazadas o una combinación.
 C        D       E
                        • El grafo está vacío si no
 D        E             existen vértices.
 E        D
Representación enlazada de Grafos
Variante 2: Representación multienlazada
• Cada vértice se representa a través de un nodo que
contiene:
  • Apuntador a su información,
  • Apuntador a una lista de arcos
  • Apuntador al siguiente vértice en la lista
•Cada arco se representa por un nodo que contiene:
  • Apuntador al próximo arco de su vértice origen
  • Apuntador al nodo de su vértice destino
Representación enlazada de Grafos
Variante 2: Representación multienlazada
• El grafo está vacío si no hay       B       A
vértices.
                                          C
                                                      D

  A       B        C       D      E               E

  c        C       D       E


                   E
  D
Representación enlazada de Grafos
  Contador de referencia formar parte de la
  información de los vértices y mantiene actualizado
  la cantidad de arcos llegan a él.

• Los contadores de referencia facilitan algunas
operaciones del grafo:
• Al eliminar un vértice se deben decrementar los
contadores de referencia de los vértices adyacentes.
Si el contador del vértice adyacente se hace cero, se
puede eliminar ese vértice si la lista de arcos está
vacía.
Implementación en C++
La representación multienlazada de grafos debe
considerar si el grafo es ponderado por los
vértices o por los arcos.

En estos casos habría que agregar a los nodos de
vértices y arcos respectivamente el peso o factor
de ponderación.
Representación enlazada de Grafos
class TVertex
{
private:
  void* aInfo;
  TGLinkedList* aEdgeList;
public:
  TVertex(void* pInfo) : aInfo(pInfo)
  {aEdgeList = new TGLinkedList();}
  void* Info() {return aInfo;}
  void Info(void* pInfo) {aInfo = pInfo;}
  TGLinkedList* EdgeList(){return
aEdgeList;}
};
Implementación en C++
class TEdge
{
private:
  TVertex* aVertex;
public:
  TEdge(TVertex* pVertex){aVertex =
pVertex;}
  TVertex* Vertex(){return aVertex;}
  void Vertex(TVertex* pVertex)
  {aVertex = pVertex;}
};
Implementación en C++
class TLinkedGraph
{
private:
  bool aDirected;
  TGLinkedList* aVerticesList;
public:
  TLinkedGraph(bool pDirected);
  ~TLinkedGraph();
  TGLinkedList* Adjacents(int);
  bool AreAdjacents(int, int);
  bool Cyclic();
  int Degree(int);
  …
};
Implementación en C++
class TLinkedGraph
{
  …
  bool DeleteEdge(int, int);
  TVertex* DeleteVertex(int);
  bool Directed (){return aDirected;}
  bool Empty(){return aVertexList-
>Empty();}
  int InDegree(int);
  bool InsertEdge(int, int);
  bool InsertVertex(void*);
  TSEdge* IsEdge (int, int);
  int OutDegree(int);
  bool Path(int, int, int);
  bool PathWithLength (int, int, int);
  TGLinkedList* VerticesList();
Inserción en grafos multienlazados
Inserción un arco de V1 a V2:
1-Verificar la existencia de los vértices V1 y V2
2-Hay dos posibilidades:
            2.1 De no existir uno o ninguno, no se
          puede insertar el arco.
            2.2 Insertarlos.
• Insertar un arco en la lista de arcos de V1 y
poner su apuntador al vértice adyacente
apuntando al nodo que contiene a V2 en la lista
de vértices.
• Si tiene contador de referencia incrementar en 1,
el contador de referencia del vértice V2.
Eliminación en grafos multienlazados
Eliminar el vértice V:

1-Verificar la existencia del vértice V.

2-Para cada arco de V:
  -Si en el vértice apuntado por ese arco hay
   contador de referencia, decrementarlo en uno y
   si éste toma el valor cero, verificar si la lista de
   arcos está vacía, para eliminarlo.
  -Eliminar el arco.
Eliminación en grafos multienlazados
Eliminar el vértice V:

3-Para cada Vértice excepto V
  -Buscar si existe algún arco que apunte a V
  -i existe eliminarlo y si la lista queda vacía,
   verificar el contador de referencia y si es cero,
   analizar de acuerdo a la política si se elimina o
   no.

4-Eliminar el vértice V.

5-Devolver la información del vértice V.

Weitere ähnliche Inhalte

Was ist angesagt?

Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacenciaFrank Doria
 
Teoria de Grafos. Conceptos básicos.
Teoria de Grafos. Conceptos básicos.Teoria de Grafos. Conceptos básicos.
Teoria de Grafos. Conceptos básicos.Nabor Chirinos
 
Listas de adyacencia
Listas de adyacenciaListas de adyacencia
Listas de adyacencialeidy2220
 
Arboles mate discreta
Arboles mate discretaArboles mate discreta
Arboles mate discretaJunior Soto
 
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.Bryan Aguilar Yaguana
 
Teoria de grafos. introducción
Teoria de grafos. introducciónTeoria de grafos. introducción
Teoria de grafos. introducciónAlejandra Guzman
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoTAtiizz Villalobos
 
Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserciónAlvaro Enrique Ruano
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoJosé Antonio Sandoval Acosta
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..NANO-06
 
5. arboles binarios
5. arboles binarios5. arboles binarios
5. arboles binarioselcapo2008
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesAngel Vázquez Patiño
 

Was ist angesagt? (20)

Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacencia
 
grafos conexos
grafos conexosgrafos conexos
grafos conexos
 
Teoria de Grafos. Conceptos básicos.
Teoria de Grafos. Conceptos básicos.Teoria de Grafos. Conceptos básicos.
Teoria de Grafos. Conceptos básicos.
 
Listas de adyacencia
Listas de adyacenciaListas de adyacencia
Listas de adyacencia
 
Arboles mate discreta
Arboles mate discretaArboles mate discreta
Arboles mate discreta
 
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
TEORÍA DE GRAFOS
TEORÍA DE GRAFOSTEORÍA DE GRAFOS
TEORÍA DE GRAFOS
 
Teoria de grafos. introducción
Teoria de grafos. introducciónTeoria de grafos. introducción
Teoria de grafos. introducción
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Div, idiv, Neg ensamblador
Div, idiv, Neg ensambladorDiv, idiv, Neg ensamblador
Div, idiv, Neg ensamblador
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserción
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..
 
Estructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no linealesEstructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no lineales
 
Conceptos básicos de los grafos
Conceptos básicos de los grafosConceptos básicos de los grafos
Conceptos básicos de los grafos
 
5. arboles binarios
5. arboles binarios5. arboles binarios
5. arboles binarios
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operaciones
 

Andere mochten auch (19)

Grafos en sage
Grafos en sageGrafos en sage
Grafos en sage
 
Grafos Ponderados
Grafos PonderadosGrafos Ponderados
Grafos Ponderados
 
estructuras no lineales
estructuras no linealesestructuras no lineales
estructuras no lineales
 
Matriz de adyacencia del grafo
Matriz de adyacencia del grafoMatriz de adyacencia del grafo
Matriz de adyacencia del grafo
 
Introducción a la_teoría_de_grafos2014para_imprimir (2)
Introducción a la_teoría_de_grafos2014para_imprimir (2)Introducción a la_teoría_de_grafos2014para_imprimir (2)
Introducción a la_teoría_de_grafos2014para_imprimir (2)
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
 
Grafo regular
Grafo regularGrafo regular
Grafo regular
 
Arboles
Arboles Arboles
Arboles
 
Recurso unidad 3
Recurso unidad 3Recurso unidad 3
Recurso unidad 3
 
Teoría de grafos
Teoría de grafosTeoría de grafos
Teoría de grafos
 
Grafos/EjerciciosPropuestos
Grafos/EjerciciosPropuestosGrafos/EjerciciosPropuestos
Grafos/EjerciciosPropuestos
 
Árboles Binarios y Grafos
Árboles Binarios  y GrafosÁrboles Binarios  y Grafos
Árboles Binarios y Grafos
 
Grafos resueltos
Grafos  resueltosGrafos  resueltos
Grafos resueltos
 
Aplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafosAplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafos
 
332 presentacion grafos
332 presentacion grafos332 presentacion grafos
332 presentacion grafos
 
Arboles
ArbolesArboles
Arboles
 
Diapositiva plan nacional de ciencia tecnologia e innovacion
Diapositiva plan nacional de ciencia tecnologia e innovacionDiapositiva plan nacional de ciencia tecnologia e innovacion
Diapositiva plan nacional de ciencia tecnologia e innovacion
 
Recorrido de anchura
Recorrido de anchuraRecorrido de anchura
Recorrido de anchura
 
Grafos
GrafosGrafos
Grafos
 

Ähnlich wie Grafos (20)

Grafos avanzado
Grafos avanzadoGrafos avanzado
Grafos avanzado
 
Capitulo1 grafos
Capitulo1 grafosCapitulo1 grafos
Capitulo1 grafos
 
Diapo teoria de grafos
Diapo teoria de grafosDiapo teoria de grafos
Diapo teoria de grafos
 
METODOS Y CONSEPTOS ESTRUCTURA DE GRAFOS
METODOS Y CONSEPTOS ESTRUCTURA DE GRAFOSMETODOS Y CONSEPTOS ESTRUCTURA DE GRAFOS
METODOS Y CONSEPTOS ESTRUCTURA DE GRAFOS
 
Grafos2010
Grafos2010Grafos2010
Grafos2010
 
Teoría de Grafos.
Teoría de Grafos.Teoría de Grafos.
Teoría de Grafos.
 
Grafoscuestionario
GrafoscuestionarioGrafoscuestionario
Grafoscuestionario
 
Teoria sobre arboles y grafos, presentacion clave sobre las bases de la intel...
Teoria sobre arboles y grafos, presentacion clave sobre las bases de la intel...Teoria sobre arboles y grafos, presentacion clave sobre las bases de la intel...
Teoria sobre arboles y grafos, presentacion clave sobre las bases de la intel...
 
Trabajo estructura de_datos_subir
Trabajo estructura de_datos_subirTrabajo estructura de_datos_subir
Trabajo estructura de_datos_subir
 
Grafos
GrafosGrafos
Grafos
 
Trabajo estructura de_datos2
Trabajo estructura de_datos2Trabajo estructura de_datos2
Trabajo estructura de_datos2
 
Trabajo estructura de_datos
Trabajo estructura de_datosTrabajo estructura de_datos
Trabajo estructura de_datos
 
Trabajo estructura de_datos
Trabajo estructura de_datosTrabajo estructura de_datos
Trabajo estructura de_datos
 
Grafos (angel)[1]
Grafos (angel)[1]Grafos (angel)[1]
Grafos (angel)[1]
 
Grafos
GrafosGrafos
Grafos
 
Grafos
GrafosGrafos
Grafos
 
S8-EDD-4.2 Aplicaciones de árboles en informática
S8-EDD-4.2 Aplicaciones de árboles en informáticaS8-EDD-4.2 Aplicaciones de árboles en informática
S8-EDD-4.2 Aplicaciones de árboles en informática
 
Grafos
GrafosGrafos
Grafos
 
Grafos
GrafosGrafos
Grafos
 
Grafos
GrafosGrafos
Grafos
 

Mehr von Zamantha Gonzalez Universidad Nacional Abierta

Mehr von Zamantha Gonzalez Universidad Nacional Abierta (20)

Elementos del diseño visual
Elementos del diseño visualElementos del diseño visual
Elementos del diseño visual
 
Instructivo Autocorreccion Pruebas Objetivas UNA
Instructivo Autocorreccion Pruebas Objetivas UNAInstructivo Autocorreccion Pruebas Objetivas UNA
Instructivo Autocorreccion Pruebas Objetivas UNA
 
Estrategias
EstrategiasEstrategias
Estrategias
 
Aspectos básicos de google classroom
Aspectos básicos de google classroomAspectos básicos de google classroom
Aspectos básicos de google classroom
 
Lineamientos curso de iniciación 2017 1
Lineamientos curso de iniciación 2017 1Lineamientos curso de iniciación 2017 1
Lineamientos curso de iniciación 2017 1
 
Presentacion telemática educativa
Presentacion telemática educativaPresentacion telemática educativa
Presentacion telemática educativa
 
Uso y creacion de unidades
Uso y creacion de unidadesUso y creacion de unidades
Uso y creacion de unidades
 
Estrategias objetivo 8
Estrategias objetivo 8Estrategias objetivo 8
Estrategias objetivo 8
 
Estrategias objetivo 7
Estrategias objetivo 7Estrategias objetivo 7
Estrategias objetivo 7
 
Estrategias objetivo 6
Estrategias objetivo 6Estrategias objetivo 6
Estrategias objetivo 6
 
Estrategias objetivo 5
Estrategias objetivo 5Estrategias objetivo 5
Estrategias objetivo 5
 
Geolocalización móvil
Geolocalización móvilGeolocalización móvil
Geolocalización móvil
 
Realidad aumentada
Realidad aumentadaRealidad aumentada
Realidad aumentada
 
Traductores de lenguaje
Traductores de lenguajeTraductores de lenguaje
Traductores de lenguaje
 
Tipos de datos en pascal
Tipos de datos en pascalTipos de datos en pascal
Tipos de datos en pascal
 
EVERNOTE
EVERNOTEEVERNOTE
EVERNOTE
 
Encuentro inicial
Encuentro inicialEncuentro inicial
Encuentro inicial
 
Encuentro inicial estudiantes primer semestre
Encuentro inicial estudiantes primer semestreEncuentro inicial estudiantes primer semestre
Encuentro inicial estudiantes primer semestre
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Traductores de lenguaje
Traductores de lenguajeTraductores de lenguaje
Traductores de lenguaje
 

Kürzlich hochgeladen

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 

Kürzlich hochgeladen (15)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 

Grafos

  • 1. PNFSI Asignatura: Desarrollo de Software Tema: Grafos Ing. Zamantha González Abril, 2008
  • 2. Tema 4: Grafos Contenido • Definición de grafo. • Operaciones sobre grafos. • Representación matricial de grafos en un lenguaje de programación. • Grafos (representación enlazada) • Operaciones sobre grafos representados de manera enlazada. • Representación enlazada de grafos en un lenguaje de programación
  • 3. Objetivos Conozcan las estructuras de datos arbóreas y las formas de trabajar con ellas en la solución de problemas de mediana complejidad
  • 4. Introducción Estructuras de datos estudiadas: Listas lineales y sus variantes. Las relaciones entre los nodos de información son lineales. •Todos los nodos tienen un único antecesor, excepto el primero que no tiene antecesor. •Todos los nodos tienen un único sucesor, excepto el último que no tiene sucesor.
  • 5. Introducción Estructuras de datos estudiadas: Los árboles y sus variantes Cuando se está en presencia de relaciones no lineales de tipo jerárquica, se utilizan los árboles. • Un nodo puede tener más de un sucesor. • Se puede establecer un camino único desde el nodo raíz hasta un nodo cualquiera del árbol. • Cada nodo tiene un único padre, exceptuando al nodo raíz del árbol, que no tiene padre.
  • 6. Introducción En ocasiones, incluso, se requiere tener acceso a un nodo determinado a partir de más de un nodo de la estructura. Existen varios caminos entre un nodo y otro. Ejemplo: • Una red hidráulica, • Caminos entre ciudades, • Afinidad entre miembros de un colectivo, entre otros.
  • 7. Introducción Ciudad B Ciudad A Ciudad D Ciudad C Ciudad F Ciudad E Caminos entre ciudades
  • 8. Definición de Árbol Un árbol (tree) es un T.D.A. que consta de un conjunto finito T de nodos y una relación R (paternidad) entre los nodos tal que: • Hay un nodo, especialmente designado, llamado la raíz del árbol T. A B C D E F G
  • 9. Definición de Árbol • Los nodos restantes, excluyendo la raíz, son particionados en m (m  0) conjuntos disjuntos T1, T2, ..., Tm, cada uno de los cuales es, a su vez, un árbol, llamado subárbol de la raíz del árbol T. A B C D E F G
  • 10. Definición de Árbol • A los nodos que no son raíces de otros subárboles se les denomina hojas del árbol T, o sea, no tienen sucesores o hijos. A B C D E F G
  • 11. Grafos Un grafo (en inglés graph) es un T.D.A. que representa un conjunto finito N de nodos, llamados vértices, relacionados entre sí por un conjunto R de arcos. Grafo con 5 vértices y 6 arcos. A B • Vértices del Grafo N ={ A, B, C, D, E } C D E • Arcos del Grafo R={(A, A), (A, B), (A, D), (A, C), (D, C), (C, E)}
  • 12. Grafos: Aclaraciones •Si el conjunto N es vacío, el grafo será vacío. • Cada arco de un grafo establece una única relación entre dos vértices. • No existe restricción en la relación que establece un arco, o sea, un vértice puede estar relacionado consigo mismo o con otro vértice. • Cada arco se representa a través de un par, donde cada elemento determina uno de los vértices.
  • 13. Observación Dado que no hay restricciones en cuanto a los arcos de un grafo, todas las estructuras vistas con anterioridad pueden ser consideradas como un grafo. Ejemplo, una lista lineal puede ser vista como un grafo donde cada nodo está relacionado con exactamente un nodo distinto de él.
  • 14. Clasificación de los Grafos Un grafo es no orientado o no dirigido (en inglés not directed o not oriented graph) si el hecho de que el arco (Nj, Nk) pertenezca a R implica que el arco (Nk, Nj) pertenece a R, para todo j y k. • Es irrelevante el sentido de las saetas en los arcos • Al representarlos, los arcos se grafican sin saeta. • El arco que los relaciona aparece una sola vez en el conjunto R de arcos del grafo. Si el grafo es no orientado, al arco se le llama arista.
  • 15. Clasificación de los Grafos Un grafo es orientado o dirigido (en inglés: oriented graph o directed graph) si el hecho de que el arco (Nj, Nk) pertenezca a R no implica que el arco (Nk, Nj) pertenece también a R, para todo j y k. • El sentido de las saetas en los arcos es importante. • Es importante la dirección del arco, o sea, el vértice origen del arco y el vértice destino. • El hecho que exista un arco de Nj a Nk no implica que exista de Nk a Nj. Se conocen como digrafos (en inglés: digraph).
  • 16. Clasificación de los Grafos A A B B C C D D E E Grafo No Orientado Grafo Orientado o o No Dirigido Dirigido
  • 17. Adyacencia El vértice n es adyacente al m, si existe un arco o arista de m a n. Adyacencia: A • B es adyacente a A B • D es adyacente a A C D • C es adyacente a A E • A es adyacente a A • C es adyacente a D • E es adyacente a C
  • 18. Incidencia El vértice n es incidente al arco o arista x, si n es uno de los vértices relacionados con el arco o arista x. Del mismo modo, se dice que el arco o arista x es incidente al vértice n. . Así, todos los arcos que llegan o salen de un nodo son incidentes a él A Incidencia: B • B es incidente al arco (A,B) C D • (A,B) es incidente a B E
  • 19. Grado de un Vértice A Sobre el Vértice D: B • Grado de Entrada: 3 D • Grado de Salida: 2 C F • Grado del Nodo: 5 E
  • 20. Grado de un Vértice El grado de un vértice n es el número de arcos incidentes a él. En el caso de los grafos orientados, el grado de entrada de un vértice n es el número de arcos que llegan a él y el grado de salida de un vértice n es el número de arcos que salen de él. Por lo tanto, el grado de un vértice es la suma de los grados de entrada y de salida del vértice.
  • 21. Ponderando arcos y vértices En muchas aplicaciones resulta de interés asignar valores de ponderación, también llamados pesos, a los arcos o a los vértices, obteniéndose así: • Grafos ponderados por los arcos • Grafos ponderados por los vértices
  • 22. Ejemplo: Grafo ponderado por los arcos Problema del agente viajero Un agente necesita repartir paquetes en diferentes ciudades. Se sabe en qué ciudades el agente debe repartir los paquetes, así como la distancia entre cada ciudad y las otras. El problema consiste en saber cuál es la mejor ruta a seguir por el agente para repartir todos los paquetes.
  • 23. Ejemplo: Grafo ponderado por los arcos El problema se puede modelar con un grafo, donde: • Las ciudades son vértices. • Los caminos entre las ciudades son arcos. Si para todas las ciudades se cumple que la distancia entre una ciudad origen y una ciudad destino y la distancia de la ciudad destino a la ciudad origen es la misma, entonces, se puede utilizar un grafo no orientado. Podemos ponderar los arcos con la distancia que existe entre las ciudades.
  • 24. Ejemplo: Grafo ponderado por los arcos El agente debe visitar tres ciudades A, B y C, partiendo de la ciudad A. Entre las ciudades A y B hay 50 km, entre las ciudades B y C hay 20 km y entre las ciudades A y C hay 15 km. 50 Km A B Caminos: C A-B-C: 70 Km A-C-B: 35 Km El camino más corto es de A a C y de C a B.
  • 25. Ejemplo: Grafo ponderado por los vértices Se tiene una secuencia de actividades, de las que se conoce su duración y se quiere saber, en un momento dado, en qué orden debieran realizarse, de forma tal que se realicen primero las de menor duración. • Las actividades se pueden representar por los vértices de un grafo no orientado. • En cada vértice se puede almacenar la duración de la actividad como factor de ponderación.
  • 26. Ejemplo: Grafo ponderado por los vértices A B 10 25 C 20 Resulta más conveniente realizar la actividad A, luego la C y, por último, la B.
  • 27. Camino entre vértices Existe un camino de longitud k desde el vértice A al B, si existe una secuencia de k+1 vértices n1, n2, ..., nk+1, donde n1 = A, nk+1 = B y (ni, ni+1) son adyacentes para todo i entre 1 y k. En un grafo no orientado, al camino se le llama cadena. Caminos entre los vértices A y C: A Camino de longitud 1: (A,C) B Camino de longitud 2: (A,D,C) C D Camino de longitud 2: (A,A,C) E Camino de longitud 3: (A,A,D,C)
  • 28. Ejemplo: Camino entre nodos ¿Existe un camino de longitud mayor que 1 entre los vértices C y B? A B C D • Camino de longitud 3: (C, B, A, B) • Camino de longitud 4: (C, B, A, C, B)
  • 29. Camino simple Entre dos vértices existe un camino simple si todos los vértices, excepto posiblemente el primero y el último, son distintos dos a dos. O sea, un camino simple es aquel en el que no se repiten los arcos. Ejemplo: A (A, B, D) B (A, B, A, C) C D
  • 30. Camino simple Un ciclo, o también circuito, es un camino simple de cualquier longitud de un vértice a sí mismo. Si el ciclo es de longitud 1, entonces se denomina bucle o lazo. A Ejemplo: B Ciclo: A,D,C,A Bucle: A,A C D E
  • 31. Grafo cíclico y acíclico Si un grafo contiene al menos un ciclo se llama cíclico. Un grafo acíclico es aquel que no tiene ningún circuito o ciclo. A A B B C C D D E Grafo cíclico Grafo acíclico
  • 32. Operaciones sobre Grafos • Construir un grafo dada la información de sus vértices. (Convenio: se crea inicialmente vacío). • Verificar si un grafo está vacío o no. • Insertar vértices y arcos. • Eliminar vértices y arcos. • Dados dos vértices, determinar si son adyacentes. • Dado un vértice, determinar cuáles vértices son adyacentes a él.
  • 33. Operaciones sobre Grafos • Dados dos vértices, determinar un camino de longitud k entre ellos. • Dado un arco, determinar vértices incidentes a él. • Determinar si el grafo es cíclico.
  • 34. Representación matricial de Grafos • La representación matricial permite establecer si hay relación entre cada vértice del grafo y los demás. • Para ello, se utiliza una matriz cuadrada. • Se utiliza un arreglo bidimensional. • Esto significa que la representación matricial es una representación secuencial.
  • 35. Representación matricial de Grafos B A C D E A partir de un grafo, siempre es posible definir un orden arbitrario de los vértices. A B C D E 0 1 2 3 4
  • 36. Matriz de Adyacencia La matriz de adyacencia representa para cada nodo cuáles son sus vértices adyacentes. • Cada fila y cada columna de la matriz se corresponde con un vértice en particular. • Los elementos de la matriz son booleanos • Si el elemento (i, j) es verdadero, existe un arco que va del vértice i al vértice j y, si el elemento (i, j) es falso, no existe arco del vértice i al vértice j. • Si el grafo es no orientado, si existe el arco del vértice i al vértice j existe el arco del vértice j al vértice i.
  • 37. Representación matricial de Grafos Vértices B A A B C D E 0 1 2 3 4 C D 0 1 2 3 4 0 0 0 1 1 0 E 1 0 0 1 0 0 Matriz de Adyacencia 2 0 0 0 1 1 3 0 0 0 0 1 4 0 0 0 1 0
  • 38. Implementación en C++ class TVertex { private: void* aInfo; public: TVertex(void* pInfo) : aInfo(pInfo){} void* Info(){return aInfo;} };
  • 39. Implementación en C++ class TSeqGraph { private: bool** aAdjacent; bool aDirected; int aOrder; TGSeqList* aVertexList; public: TSeqGraph(int, bool); ~TSeqGraph(); TGSeqList* Adjacents(int); bool AreAdjacents(int, int); bool Cyclic(); int Degree(int); … };
  • 40. Implementación en C++ class TSeqGraph { public: … bool DeleteEdge(int, int); bool DeleteVertex(int); bool Directed() {return aDirected;} bool Empty(){return aVertexList->Empty();} bool InsertEdge(int, int); bool InsertVertex(void*); bool IsEdge(int, int); bool IsPathWithLength(int, int, int); int Order() {return aOrder;} TGSeqList* VertexList(){return aVertexList;} };
  • 41. Problemas La representación de la matriz de adyacencia de un grafo exige conocer por adelantado la cantidad de vértices del grafo. Esta representación no es suficientemente flexible cuando la cantidad de vértices varía con relativa frecuencia o cuando la estructura del grafo cambia durante la ejecución de la aplicación que lo usa. Esto implica crear la matriz cada vez que se inserte o elimine un nuevo vértice. Problema: Solución costosa en tiempo y recursos.
  • 42. Representación enlazada de Grafos Problemas B A Variante 1: • Es difícil saber cuántos arcos llegan a un vértice. Una lista de vértices y cada uno tiene C • Se repite los vértices adyacentes a él. D una lista de la información del vértice E A C D • Las listas pueden ser B C indistintamente secuenciales o enlazadas o una combinación. C D E • El grafo está vacío si no D E existen vértices. E D
  • 43. Representación enlazada de Grafos Variante 2: Representación multienlazada • Cada vértice se representa a través de un nodo que contiene: • Apuntador a su información, • Apuntador a una lista de arcos • Apuntador al siguiente vértice en la lista •Cada arco se representa por un nodo que contiene: • Apuntador al próximo arco de su vértice origen • Apuntador al nodo de su vértice destino
  • 44. Representación enlazada de Grafos Variante 2: Representación multienlazada • El grafo está vacío si no hay B A vértices. C D A B C D E E c C D E E D
  • 45. Representación enlazada de Grafos Contador de referencia formar parte de la información de los vértices y mantiene actualizado la cantidad de arcos llegan a él. • Los contadores de referencia facilitan algunas operaciones del grafo: • Al eliminar un vértice se deben decrementar los contadores de referencia de los vértices adyacentes. Si el contador del vértice adyacente se hace cero, se puede eliminar ese vértice si la lista de arcos está vacía.
  • 46. Implementación en C++ La representación multienlazada de grafos debe considerar si el grafo es ponderado por los vértices o por los arcos. En estos casos habría que agregar a los nodos de vértices y arcos respectivamente el peso o factor de ponderación.
  • 47. Representación enlazada de Grafos class TVertex { private: void* aInfo; TGLinkedList* aEdgeList; public: TVertex(void* pInfo) : aInfo(pInfo) {aEdgeList = new TGLinkedList();} void* Info() {return aInfo;} void Info(void* pInfo) {aInfo = pInfo;} TGLinkedList* EdgeList(){return aEdgeList;} };
  • 48. Implementación en C++ class TEdge { private: TVertex* aVertex; public: TEdge(TVertex* pVertex){aVertex = pVertex;} TVertex* Vertex(){return aVertex;} void Vertex(TVertex* pVertex) {aVertex = pVertex;} };
  • 49. Implementación en C++ class TLinkedGraph { private: bool aDirected; TGLinkedList* aVerticesList; public: TLinkedGraph(bool pDirected); ~TLinkedGraph(); TGLinkedList* Adjacents(int); bool AreAdjacents(int, int); bool Cyclic(); int Degree(int); … };
  • 50. Implementación en C++ class TLinkedGraph { … bool DeleteEdge(int, int); TVertex* DeleteVertex(int); bool Directed (){return aDirected;} bool Empty(){return aVertexList- >Empty();} int InDegree(int); bool InsertEdge(int, int); bool InsertVertex(void*); TSEdge* IsEdge (int, int); int OutDegree(int); bool Path(int, int, int); bool PathWithLength (int, int, int); TGLinkedList* VerticesList();
  • 51. Inserción en grafos multienlazados Inserción un arco de V1 a V2: 1-Verificar la existencia de los vértices V1 y V2 2-Hay dos posibilidades: 2.1 De no existir uno o ninguno, no se puede insertar el arco. 2.2 Insertarlos. • Insertar un arco en la lista de arcos de V1 y poner su apuntador al vértice adyacente apuntando al nodo que contiene a V2 en la lista de vértices. • Si tiene contador de referencia incrementar en 1, el contador de referencia del vértice V2.
  • 52. Eliminación en grafos multienlazados Eliminar el vértice V: 1-Verificar la existencia del vértice V. 2-Para cada arco de V: -Si en el vértice apuntado por ese arco hay contador de referencia, decrementarlo en uno y si éste toma el valor cero, verificar si la lista de arcos está vacía, para eliminarlo. -Eliminar el arco.
  • 53. Eliminación en grafos multienlazados Eliminar el vértice V: 3-Para cada Vértice excepto V -Buscar si existe algún arco que apunte a V -i existe eliminarlo y si la lista queda vacía, verificar el contador de referencia y si es cero, analizar de acuerdo a la política si se elimina o no. 4-Eliminar el vértice V. 5-Devolver la información del vértice V.