Estructura de datos elaboró: lic. Dora Araceli Cruz Huerta



Descargar 0,53 Mb.
Página6/6
Fecha de conversión14.03.2017
Tamaño0,53 Mb.
1   2   3   4   5   6

4.2.2 Tipos de grafos.

Podemos clasificar los grafos en dos grupos: dirigidos y no dirigidos. En un grafo no dirigido el par de vértices que representa un arco no está ordenado. Por lo tanto, los pares (v1, v2) y (v2, v1) representan el mismo arco. En un grafo dirigido cada arco está representado por un par ordenado de vértices, de forma que y representan dos arcos diferentes.


Ejemplos
G1 = (V1, A1)

V1 = {1, 2, 3, 4} A1 = {(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)}

G2 = (V2, A2)

V2 = {1, 2, 3, 4, 5, 6} A2 = {(1, 2), (1, 3), (2, 4), (2, 5), (3, 6)}

G3 = (V3, A3)

V3 = {1, 2, 3} A3 = { <1, 2>, <2, 1>, <2, 3> }


Gráficamente estas tres estructuras de vértices y arcos se pueden representar de la siguiente manera:

Algunos de los principales tipos de grafos son los que se muestran a continuación:


Grafo regular: Aquel con el mismo grado en todos los vértices. Si ese grado es k lo llamaremos k-regular.
Por ejemplo, el primero de los siguientes grafos es 3-regular, el segundo es 2-regular y el tercero no es regular
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 Ejemplo.- de los dos grafos siguientes el primero es bipartito y el segundo no lo es.
Grafo completo: Aquel con una arista entre cada par de vértices. Un grafo completo con n vértices se denota Kn.
A continuación pueden verse los dibujos de K3, K4, K5 y K6
Un grafo bipartito regular: se denota Km,n donde m, n es el grado de cada conjunto disjunto de vértices.

A continuación ponemos los dibujos de K1,2, K3,3, y K2,5
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.

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.



Grafos Platónicos: Son los Grafos formados por los vértices y aristas de los cinco sólidos regulares (Sólidos Platónicos), a saber, el tetraedro, el cubo, el octaedro, el dodecaedro y el icosaedro.





GRAFOS EULERIANOS.
Para definir un camino euleriano es importante definir un camino euleriano primero. Un camino euleriano se define de la manera más sencilla como un camino que contiene todos los arcos del grafo.
Teniendo esto definido podemos hablar de los grafos eulerianos describiéndolos simplemente como aquel grafo que contiene un camino euleriano. Como ejemplos tenemos las siguientes imágenes:
El primer grafo de ellos no contiene caminos eulerianos mientras el segundo contiene al menos uno.
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”.


4.2.3 Representación de grafos en memoria.
Los grafos se representan en memoria secuencial mediante matrices de adyacencia.
Una matriz de adyacencia, es una matriz de dimensión n*n, en donde n es el número de vértices que almacena valores booleanos, donde matriz M[i,j] es verdadero si y solo si existe un arco que vaya del vértice y al vértice j.

Veamos el siguiente grafo dirigido:


La matriz de adyacencia, que se obtuvo a partir del grafo anterior es la siguiente:



Los grafos se representan en memoria enlazada mediante listas de adyacencia.


Una lista de adyacencia, se define de la siguiente manera: Para un vértice i es una lista en cierto orden formada por todos los vértices adyacentes [a,i]. Se puede representar un grafo por medio de un arreglo donde cabeza de i es un apuntador a la lista de adyacencia al vértice i.
Veamos el siguiente grafo dirigido:

La lista de adyacencia, que se obtuvo a partir del grafo anterior es la siguiente:


4.2.4 Clases para la implementación de grafos.

En esta sección analizaremos algunas de las operaciones sobre grafos, como:


 

  • Creación.

  • Inserción.

  • Búsqueda.

  • Eliminación.

En esta sección, continuaremos utilizando los apuntadores que se usaron en las secciones anteriores. TOP para hacer referencia al primer nodo, LD para indicar liga derecha y LA para indicar liga abajo, por último usaremos los apuntadores P y Q para hacer referencia a los nuevos nodos que vayan a ser usados.
ALGORITMO DE CREACION.
repite

      si top=NIL entonces

        new(top)

        top(la)<--NIL

        top(ld)<--NIL

        lee(top(dato))

        q<--top

      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

p<--top


mientras p<>NIL haz

        mensaje(tiene vértices adyacentes p(dato) ?)

        lee(respuesta)

        si respueta=si entonces

                repite

                      new(q)

                      lee(q(dato))

                      q(ld)<--p(ld)

                      p(ld)<--q

                      mensaje(otro vértice ?)

                      lee(respuesta2)

                hasta respuesta2=no

        p<--p(la)

ALGORITMO DE INSERCION
mensaje(valor a insertar ?)

lee(valor_a_insertar)

si top<>NIL entonces

        p<--top

        mientras p(la)<>NIL haz

                p<--p(la)

        new(q)

        lee(q(dato))

        p(la)<--q

        q(la)<--NIL

        mensaje(Hay vértices adyacentes?)

        lee(respuesta)

        si respuesta=si entonces

                mensaje(Cuantos vértices?)

                lee(número_vértices)

                desde i=1 hasta número_vértices haz

                        new(p)

                        lee(p(dato))

                        q(ld)<--p

                        q<--q(ld)

en caso contrario

        mensaje(no existe lista)

ALGORITMO DE BUSQUEDA

mensaje(vértice a buscar)

lee(vértice_a_buscar)

p<--top


repite

      si p(dato)=vértice_a_buscar entonces

        repite

              p<--p(ld)

              escribe(p(dato))

        hasta p(ld)=NIL

      en caso contrario

        p<--(la)

hasta p=NIL

ALGORITMO DE BORRADO
mensaje(vértice a borrar ?)

lee(vértice_a_borrar)

p&Lt--top

r<--p


q<--p

sw<--falso

repite

      si p(dato)=vértice_a_borrar entonces



        si p=top entonces

                top<--top(la)

                r<--top

                sw<--verdadero

        en caso contrario

                r(la)<--p(la)

        repite

             p<--p(ld)

             dispose(q)

             q<--p

        hasta p=NIL

        si sw=verdadero entonces

                p<--r

                q<--p

        en caso contrario

                p<--r(la)

                q<--p

      en caso contrario

        r<--p

        repite

              q<--p(ld)

              si q(dato)=vértice_a_borrar entonces

                p(ld)<--q(ld)

                dispose(q)

                q<--p

             en caso contrario

                p<--p(ld)

hasta p=NIL



BIBLIOGRAFIAS

  • Aho, A.V., J.E. Hopcroft, J.D. Ullman, Estructuras de datos y algoritmos, Addison-Wesley, 1988.




  • Arnold, K., J. Gosling, D. Holmes, El Lenguaje de Programación Java, 3ª Ed., Addison-Wesley, 2001.




  • Arnow, D., G. Weiss, Introducción a la Programación con Java. Un enfoque Orientado a Objetos, Addison-Wesley, 2000.




  • Eckel, B., Piensa en Java. 2ª Edición, Prentice-Hall, 2002.




  • Horowitz, E., S. Sahni, Fundamentals of Data Structures in Pascal, Computer Science, 1994.




  • Joyanes, L., I. Zahonero, Estructuras de Datos. Algoritmos, abstracción y objetos, McGraw-Hill, 1998.




  • Peña, Ricardo, Diseño de programas. Formalismo y abstracción, Prentice-Hall, 1998.




  • Weiss, M.A., Estructuras de datos y algoritmos, Addison-Wesley, 1995.









Compartir con tus amigos:
1   2   3   4   5   6


La base de datos está protegida por derechos de autor ©absta.info 2019
enviar mensaje

    Página principal