Вы находитесь на странице: 1из 9

SOFTWARE PARA TEORIA DE GRAFOS

Snchez Enriquez Heider Isaas heider_esencia@hotmail.com Rodrguez Maysundo Eduardo ed_rm@hotmail.com Ruiz Campos Johnatan Eric je_blue87@hotmail.com Universidad Nacional De Trujillo Escuela Profesional De Informtica

RESUMEN El presente trabajo trata de abordar conceptos de Teora de Grafos y plasmarlos en un Software de uso interactivo y con una interfaz amigable. El problema es realizar un software comercial, de fcil uso y legible, en el desarrollo de grafos dirigidos y no dirigidos, con sus principales operaciones sobre este. En el mercado existen muchas aplicaciones que resuelven este problema. Pero nuestra propuesta es que no solamente el usuario experto en Teora de Grafos, acceda al software sino tambin aquellos que tienen poca nocin del tema, y puedan modelar fcilmente distintos problemas de la realidad. Por ello el software tiene una amplia gama de validaciones, y reportes de mensajes. Los logros obtenidos son de calidad favorable, respondiendo a los objetivos planteados. Palabras Claves: Teora de Grafos, Grafo dirigido, Grafo no dirigido, Vrtice, Arista, recorrido de grafos, recubrimiento de grafos, software.

diferentes problemas relacionados con stos. Son conocidos los informticos renombrados que realizaron estudios tales como: Kruskal, Dijkstra, Prim, etc. En el presente Software tratamos de implementar los principales algoritmos sobre grafos tales como: rbol de Recubrimiento Mnimo, Ruta ms corta, etc. El tratamiento de grafos es un problema que viene a ser desarrollado durante casi toda la vida de un informtico desde el curso de estructuras de datos hasta actualmente en cursos de Optimizacin en Postgrado, nos fue apasionante el desarrollo de este proyecto desde su inicio hasta el final nos agrado la forma eficiente y rpida que soporta Java el uso de grficos, la gran cantidad de herramientas que nos proporciona para la realizacin de nuestro trabajo y adems el encapsulamiento de la estructura del programa; propiedad fundamental en la programacin orientada a objetos. Java nos muestra un nuevo mundo, uno en el cual casi todo es posible y si hay algo que no esta implementado se puede realizar. Este mundo de multiplataforma, actualidad y eficiencia que nos proporcion este excelente lenguaje nos demostr que un lenguaje libre y de dominio pblico puede proporcionarnos todas las herramientas que necesitamos para desarrollar software de alta calidad y de bajo costo. Adems de lo bueno que fue Java, tambin nos entretuvo la eleccin de los algoritmos a implementar en nuestro programa ya que la eficiencia o eficacia de estos radica en su tiempo de ejecucin el cual debimos determinar y en algunos casos mejorar para la realizacin ptima de las operaciones. 2. 2.1. Grafo Un grafo es un par (V, A) donde V es un conjunto finito no vaco (conjunto de vrtices) y A un conjunto finito de pares (V x V) no ordenados de vrtices (conjunto de aristas). Grficamente, los vrtices se representan por puntos y las aristas por lneas que los unen. CONCEPTOS PREVIOS IMPORTANTES

1.

INTRODUCCION

Muchos problemas que incluyen objetos de la vida real pueden ser representados fcilmente utilizando una estructura de datos que represente un grafo. Estas estructuras de datos son simples y eficaces en la resolucin de problemas ya que los nodos de este pueden representar muchas cosas tales como: una ciudad, un estado, un centro informtico, un servidor, etc. Para lo cual tendremos que discretizar los objetos de la realidad para poder ser representados por esta estructura fundamental de datos. Los grafos son muy usados por las mltiples operaciones que se pueden realizar en ellos y la fcil manera de equiparar estas relaciones con problemas de la vida real. Este tema ha sido de estudio durante muchos aos por lo cual se han logrado desarrollar muchos algoritmos para los

El orden de un grafo es el nmero de vrtices que lo compone |V| y la medida de un grafo es el numero de aristas. 2.2. Digrafo Un digrafo G = (V, E) esta formado por un conjunto finito no vaco V (conjunto de vrtices) y por un conjunto E de pares ordenados de elementos distintos de V (conjunto de arcos). 2.3. Vrtices y Aristas Los Vrtices son los puntos o nodos con los que esta conformado un grafo. El grado de un vrtice es el nmero de aristas de las que es extremo. Se dice que un vrtice es par o impar segn lo sea su grado. Las Aristas son las lneas con las que se unen los vrtices de un grafo y con la que se construyen tambin caminos. Si la arista carece de direccin (en los grafos) se denota indistintamente {a, b} o {b, a}, y si tuviera direccin (en los digrafos) se le de denota solo {a, b} o {b, a} segn la direccin dada. Siendo a y b los vrtices que une. Un vrtice puede tener 0 o ms aristas, pero toda arista debe unir exactamente dos vrtices. Si {a, b} es una arista, a los vrtices a y b se les llama sus extremos.

Fig. 1. Ejemplo de un Grafo simple 2.6. Grafo bipartido o bipartito Un grafo bipartido es un grafo simple donde se puede encontrar una particin de V tal que V = X Y con X Y = tal que toda arista uv A une vrtices de distinta parte, es decir, une un vrtice u de la capa X con un vrtice v de la capa Y. A continuacin se expone un teorema para poder saber si un grafo es o no bipartido. Teorema: Un grafo G es bipartido si y solo si no contiene ciclos impares.
1 2 3 4

7 6 5 Fig. 2. Grafo Bipartido

2.7. Subgrafo
2.4. Adyacencia e Incidencia Dos vrtices son adyacentes si son extremos de una misma arista. Dos aristas son adyacentes si tienen un extremo comn, as que los vrtices adyacentes a un vrtice dado son todos los vrtices que estn al otro extremo de las aristas que tienen como origen o destino el vrtice dado. Un vrtice aislado no tiene vrtices adyacentes. Un vrtice y una arista son incidentes si el vrtice es extremo de la arista. 2.5. Grafos Simples Un grafo simple es un par G = (V, A) donde V es un conjunto finito, no ordenado y no vaco y A es un conjunto finito de pares no ordenados de vrtices distintos de V, es decir, no debe haber ni aristas mltiples ni bucles.

G' = (N', A') es un subgrafo de G = (N, A) si: 1) G' es un grafo 2) N' es un subconjunto de N 3) A' es un subconjunto de A Un subgrafo se obtiene eliminando nodos y arcos de un grafo. 2.8. Conexin de Grafos Un grafo G= (V, E) se denomina conexo si existe un camino entre cualquier par de vrtices distintos de G. Dado un grafo G = (V, A), una componente conexa de G ser el grafo que se obtiene al tomar todos los vrtices que estn en la componente conexa de un cierto vrtice de V y todas las aristas del grafo que conectan estos vrtices. Sealemos que las componentes conexas de un grafo son grafos conexos y es fcil ver que todo grafo se puede

representar como unin de grafos conexos (sus componentes conexas). 2.9. Recorridos de un Grafo Existen dos mtodos distintos de recorrer un grafo para explorar todos sus vrtices. La diferencia es fundamentalmente el orden en que se visitan los diferentes vrtices [1]. Estos mtodos son: 2.9.1. Recorrido en Profundidad: Se comienza en el vrtice inicial (vrtice con ndice 1) que se marca como vrtice activo. Hasta que todos los vrtices hayan sido visitados, en cada paso se avanza al vecino con el menor ndice siempre que se pueda, pasando este a ser el vrtice activo. Cuando todos los vecinos al vrtice activo hayan sido visitados, se retrocede al vrtice X desde el que se alcanz el vrtice activo y se prosigue siendo ahora X el vrtice activo. Algoritmo para el Recorrido en Profundidad

Algoritmo para el Recorrido en Anchura Sea G = (V, A) un grafo conexo, V = V un conjunto de vrtices, A un vector de arcos inicialmente vaco y P un vector auxiliar inicialmente vaco. 1. Se introduce el vrtice inicial en P y se elimina del conjunto. 2. Mientras V no sea vaco repetir los puntos 3 y 4. En otro caso parar. 3. Se toma el primer elemento de P como vrtice activo. 4. Si el vrtice activo tiene algn vrtice adyacente que se encuentre en V: - Se toma el de menor ndice. - Se inserta en P como ultimo elemento. - Se elimina de V. - Se inserta en A el arco que le une con el vrtice activo. Si el vrtice activo no tiene adyacentes se elimina de P. 2.10. rbol

Sea G = (V, A) un grafo conexo, V = V un conjunto de vrtice, A un vector de arcos inicialmente vaco y P un vector auxiliar inicialmente vaco: 1. 2. 3. 4. Se introduce el vrtice inicial en P y se elimina del conjunto V. Mientras V no sea vaco repetir los puntos 3 y 4. En otro caso parar. Se toma el ltimo elemento de P como vrtice activo. Si el vrtice activo tiene algn vrtice adyacente que se encuentre en V: - Se toma el de menor ndice. - Se inserta en P como ultimo elemento. - Se elimina de V. - Se inserta en A el arco que le une con el vrtice activo. Si el vrtice activo no tiene adyacentes se elimina de P.

Un rbol A= (V, E) es un grafo no dirigido, conexo y sin ciclos. Todos los caminos de un grafo son simples. Un tipo de rbol que tendremos en cuenta es el rbol Libre [2]: 2.10.1. rbol Libre: Un rbol libre es un grafo no dirigido conexo acclico. Todo rbol libre con n vrtices tiene n-1 aristas. Si se aade una arista se introduce un ciclo. Si se borra una arista quedan vrtices no conectados. cualquier par de vrtices est unido por un nico camino simple un rbol libre con un vrtice distinguido es un rbol con raz.

2.9.2. Recorrido en Anchura Se comienza en el vrtice inicial (vrtice con ndice 1) y se marca como vrtice activo, a diferencia con el de profundidad ahora se visitan en orden creciente de ndice todos los vecinos del vrtice activo antes de pasar al siguiente. Hasta que todos los vrtices hayan sido visitados, en cada paso se van visitando en orden creciente de ndice todos los vecinos del vrtice activo. Cuando se han visitado todos los vecinos del vrtice activo, se toma como nuevo vrtice activo el primer vrtice X visitado despus del actual vrtice activo en el desarrollo del algoritmo.

2.11. rboles Recubridores de un Grafo Un rbol de recubrimiento de un grafo no dirigido y etiquetado no negativamente es cualquier subgrafo que contenga todos los vrtices y que sea un rbol libre [2]. Los rboles de recubrimiento son: 2.11.1. rbol de Recubrimiento Mnimo Un rbol de recubrimiento mnimo es un rbol de recubrimiento y no hay ningn otro cuya suma de los pesos de las aristas sea menor.

Algoritmos para hallar rboles generadores mnimos: a) Algoritmo de Kruskal Se eligen aristas de la forma ms econmica. Inicialmente se ordenan las aristas por su peso. A continuacin se van eligiendo las aristas de menor peso de modo tal, que no formen ciclo con las aristas anteriormente seleccionadas. Para evitar que se formen ciclos se asignan etiquetas a los vrtices de modo que los vrtices que formen parte de las aristas ya elegidas tengan todos la misma etiqueta. [3] 1. 2. 3. T={} Asignar etiquetas a todos los vrtices t(i)=i, i=1, 2, ..., n. Mientras halla vrtices con etiquetas diferentes repetir. - Escoger la arista (u, v) de menor peso tal que t(u) sea diferente de t(v). Agregarla a T. - Asignar a todos los vrtices de una componente conexa de T la misma etiqueta. b) Algoritmo de Dijkstra [4] Sean: G = (V, E) donde V es el conjunto de vrtices y E el de arcos. S es el conjunto de vrtices cuyos caminos ms cortos al origen han sido ya determinados. V-S es el resto de vrtices. d: ARRAY de estimaciones de caminos ms cortos a dichos vrtices. pi: ARRAY de predecesores para cada vrtice. 1. 2. 3. 4. 5. 6. Inicializar d y pi Poner S a vaco // aun no hemos estudiado ningn vrtice. Mientras {V-S} vaco //mientras queden nodos sin determinar su camino mnimo al origen Ordenar los vrtices en V-S y analizar de acuerdo a la menor distancia al origen. Aadir u, el vrtice ms cercano en V-S, a S // S = S + {u} Relajar todos los vrtices todava en V-S conectados a u

pequea modificacin la cual seria escoger las aristas de mayor peso en vez de las de menor peso. 2.12. Emparejamiento de un Grafo Un emparejamiento (matching) en un grafo no dirigido y simple g = (v, a) es un subconjunto de aristas M A tal que dos aristas cualesquiera de M no tengan un extremo comn. Evidentemente un subconjunto de un emparejamiento es tambin un emparejamiento aunque de menor cardinal. Algunos tipos de emparejamientos: 2.12.1. Emparejamiento Perfecto Un emparejamiento es perfecto cuando todos los vrtices de G son extremo de alguna arista de M, es decir, cuando todos los vrtices del grafo son vrtices saturados por M. [5] 2.12.2. Emparejamiento Maximal Un emparejamiento maximal en un grafo es un emparejamiento que no puede ser ampliado agregando una arista. Un emparejamiento es maximal si y solo si toda arista de G comparte extremos con alguna arista de M.

Fig. 3. Emparejamiento Maximal

2.12.3. Emparejamiento Mximo Un emparejamiento mximo es un emparejamiento que tiene el mayor nmero posible de aristas. Todo emparejamiento mximo es tambin maximal, pero no necesariamente al revs, ya que un emparejamiento sea maximal no implica que sea mximo.

2.11.2. rbol de Recubrimiento Mximo Un rbol de recubrimiento mximo es un rbol de recubrimiento y no hay ningn otro cuya suma de los pesos de las aristas sea mayor. Para conseguir el rbol de recubrimiento se puede emplear el algoritmo de Kruskal, solo hacindolo una

Fig. 4. Emparejamiento mximo y Perfecto


-

Fig. 5. Emparejamiento Mximo No Perfecto 3. DESARROLLO DEL SOFTWARE 3.2.2.

corta de un vrtice a otro y desde un vrtice origen a todos los dems. Reportar de una manera formal los distintos tipos de grafos procesados. Proporcionar la posibilidad de guardar y recuperar un grafo de un tipo de unidad de almacenamiento. Presentar aplicaciones utilizando diversas operaciones sobre Grafos.

Descripcin de usuarios:

En esta parte del desarrollo del software, describiremos parte del ciclo de vida, con una visin de conceptualizar caractersticas importantes en el desarrollo y la aplicacin final (programa ejecutable). 3.1. Definicin Del Problema 3.1.1. Definicin: Representar en forma adecuada y realizar ptimamente las operaciones en un grafo tanto dirigido como no dirigido. 3.1.2. Objetivos 5. Lograr que el usuario interacte con el software para la manipulacin de grafos en pantalla. Representar de forma eficiente las diferentes operaciones que sobre grafos se pueden realizar y adems de que el usuario logre comprenderlos. Dar a conocer la importancia del conocimiento de esta importante estructura de datos.

Este software es de propsito general, cualquier usuario puede interactuar con el. Nosotros clasificamos a los usuarios en dos clases: a) Usuario experto: Es aquel usuario que tiene una nocin clara sobre Grafos, y puede manipular el programa con mayor facilidad. Este usuario es quien puede dar al software el valor adecuado ya que responder eficazmente sus problemas de modelamiento y sus principales operaciones. b) Usuario Inexperto: Es la persona que conoce poco del tema, pero necesita interactuar con el programa, para algunas tareas personales, estas personas pueden ser: estudiantes de colegios, novatos en matemtica universitaria, etc.

3.3.3. Ejemplos de formatos de respuesta La respuesta del software para las diversas peticiones del usuario se muestra a continuacin: Estos son ejemplos de grafos ponderados dibujado por el Usuario, a travs de la paleta de dibujo:

3.2. Anlisis Y Especificacin De Requerimientos: 3.2.1. Requisitos Funcionales: Graficar de forma fcil y eficaz diferentes tipos de grafos tales como: Grafos Simples, Grafos Bipartitos y Dgrafos. Permitir al usuario modificar el grafo en pantalla (cambio de posicin de vrtices, cambiar color, eliminar vrtices o aristas). Colocar pesos a las aristas, convirtiendo al grafo en ponderado. Realizar de forma eficiente funciones para Grafos no dirigidos tales como: rbol de recubrimiento mnimal y mximal, Recorrido en profundidad y en anchura y Emparejamiento de Grafos. Realizar de forma eficiente funciones para Grafos Dirigidos tales como: Recorrido en profundidad, Recorrido en anchura, Ruta ms

Fig. 1. Grafo dirigido ponderado.

3.3.1. Estructura de datos utilizada: Los grafos se suelen representar matricialmente para poder resolver diversos ejercicios sobre estos. Se utiliza la matriz de Incidencia para almacenar las relaciones entre vrtices y aristas, es una matriz booleana, de nxm, en donde n representa el numero de Vrtices del grafo y m el numero de aristas. En el siguiente ejemplo mostramos la matriz de incidencia para el grafo mostrado en la figura 2. Dado el Grafo=(V,E), en donde V={ 0, 1, 2, 3, 4 } y E={ e0=(v0,v1), e1=(v0,2), e2=(v0,v4), e3=(v1,v3), e4=(v1,v4), e5=(v2,v3), e6=(v2,v4), e7=(v3,v4) }.

Fig. 2. Grafo no dirigido ponderado Estos solo son dos ejemplos principales de formato de respuesta del software, utilice el software y comprobara mas resultados. 3.3.4. Representacin Pictrica de Procesos
Tengo un problema, como lo soluciono?

e0 e1 e2 e3 e4 e5 e6 e7
v0 1 v1 1 v2 0 v3 0 v4 0
1 0 1 0 0 1 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1

Fig. 3. Matriz de Incidencia Modelamiento del problema a travs de un grafo. Problema solucionado, gracias a las operaciones sobre grafos. La matriz de adyacencia se usa para relacin entre vrtices, es una matriz de nxn, en donde n es el numero de vrtices del grafo. La matriz puede ser booleana, o de pesos es decir en la casilla de la relacin se coloca un 1 o el peso que existe en la arista de la relacin. Tomamos la misma figura de la representacin anterior para formar la matriz de adyacencia del grafo.

Dibujado de vrtices y aristas con su respectivo peso. Aplicacin de operaciones sobre grafos.

Reporte grafico de la solicitud enviada al software

v0 v1 v2 v3 v4
v 0 0 1 1 0 1 v1 1 0 0 1 1 v 2 1 0 0 1 1 v3 0 1 1 0 1 v4 1 1 1 1 0
Fig. 3. Matriz de Adyacencia Para el desarrollo de nuestro software, utilizamos dos estructuras de datos para cada tipo de grafos, y que explicaremos a continuacin: Para grafos no dirigidos tomamos la siguiente representacin: Sea el grafo G=(V,E), en donde en donde: V={ v0, v1, v2,.. , vn }, n=|V|

3.3. Diseo: Para el diseo del software, se tuvo en cuenta el paradigma de Programacin Orientada a Objetos (POO), ya que es un paradigma con alto de grado de aplicacin por su excelente modulacin de funciones, hacindoles altamente cohesivos y dbilmente acoplados. En esta seccin describiremos la estructura de datos que utilizamos, esquematizaremos los diferentes procesos y la relacin entre sus mdulos.

E={ e0, e1, e2, , em}, m=|E| Los vrtices almacenamos en un vector (Array o matriz de orden 1xn): 0 1 2 n-1 v1 v2 v3 vn Para representar una arista utilizamos la siguiente estructura: Estructura de la Arista Extremo 1 Extremo 2 Numero entero Numero entero

0 1 2 n-1

v1 vx v2 vx v3 vx

vn vx

Fig. 4. Estructura del conjunto de Arcos del grafo Peso Numero entero

3.3.2. Diseo descendente: El diseo descendente nos muestra la jerarqua de acceso a los diversos procesos del software recurriendo a la modularidad. En otras palabras consiste en dividir el problema principal en subproblemas y el subproblema en sub-subproblemas ms, y as sucesivamente.

Y para las aristas en conjunto utilizamos el concepto de Listas enlazadas, para enlazar todas las aristas del grafo.
0 1

....

m-1

Para grafos dirigidos cambiamos la estructura de representacin. Sea el dgrafo G=(V,E), en donde en donde: V={ v1, v2,.. , vn }, n=|V| E={ e1, e2, , em}, m=|E| Los vrtices tambin lo almacenamos en un vector: 0 1 2 n-1 v1 v2 v3 vn La estructura de los arcos se representada de la siguiente forma: Estructura del Arco: Padre Hijo Numero entero Numero entero Fig. 5. Diseo descendente

Peso Numero entero Fig. 6. Divisin del sub-problema: Dibujar Grafo

Para el conjunto de arcos que conforma el dgrafo, consideramos una vector de lista de Arcos, En donde cada posicin del vector seala que en esa lista de arcos como padre comn para todos los arcos es el vrtice de la misma posicin en el vector de vrtices. De esta manera la estructura queda bien definida para poder aplicar de manera eficiente diversas operaciones sobre dgrafos.

Realizar Operaciones

encapsulacin, reutilizacin y dems caractersticas del paradigma orientado a objetos.


Sobre un Grafo no dirigido

Sobre un Grafo dirigido

Recorrido en Profundidad

Recorrido en Anchura

Es un lenguaje abierto de tal manera que todas aplicaciones desarrolladas en l pueden ser ejecutadas en todas las plataformas existentes Microsoft Windows, Unix, Solaris. Ya que la aplicacin se ejecuta sobre una mquina virtual que est disponible para distintos sistemas operativos. Esto significa que la aplicacin realizada en Java es totalmente portable. Es un lenguaje orientado a Internet, con los que los programas en Java pueden ser ejecutados en pginas Web, a travs de servidores o localmente a travs de un navegador. No es necesaria instalacin de libreras adicionales al sistema operativo para la ejecucin de programas. Es de libre distribucin, sin coste para el desarrollador.

Camino mas corto de un vrtice a otro.

Recubrimiento Minimal

Camino mas corto de un vrtice a todos.

Recubrimiento Maximal

Emparejamiento mximo

Fig. 7. Divisin del sub-problema: Realizar operaciones


Reportar grafo

Pero no todo son ventajas, Java tambin posee algunas desventajas a tener en cuenta, si bien es cierto que van desapareciendo: La interfaz grfica original de java sigue siendo pobre. Algunas de las funciones dependen hoy por hoy del navegador que se utilice. Un vistazo al software externo es el siguiente:

Grafo Original

Grafo de Operacin

Fig. 8. Divisin del sub-problema: Reportar Grafo 3.3. Implementacin: La implementacin del software nos fue un reto, ya que tuvimos que analizar diferentes algoritmos y modificarlos para encajar nuestra estructura de datos, a la vez crear algunos nuevos para complementar el desarrollo del software. Como se ha comentado en la introduccin se ha elegido el lenguaje de programacin Java, Ya que este lenguaje es netamente orientada a objetos. El seleccionar Java como lenguaje fue un reto para nosotros, puesto que ha supuesto el aprendizaje del lenguaje para poder desarrollar la aplicacin, debido a la inexperiencia sobre este lenguaje. Java aporta continuacin: muchas ventajas enumeradas a

Es un lenguaje de programacin orientado a objetos, con todas las ventajas que supone esta metodologa de programacin, en cuanto a la

Fig. 9. Apariencia del programa hecho en Java

Tambin implementamos una aplicacin: El Laberinto. Que consiste en que un sujeto debe encontrar su objetivo en un laberinto, para ello cada cuadro representa un vrtice. Un vrtice forma una arista con su vecino en las cuatro direcciones. Para poder hallar el objetivo, se utiliza el recorrido en profundidad.

4.

CONCLUSIONES

- Se logro desarrollar un software altamente eficiente y efectivo. - Se logro realizar un software completo con manejo de operaciones y aplicaciones. - Pudimos comprobar la eficiencia de los diferentes algoritmos sobre grafos. - La aplicacin de la Programacin Orientada a Objetos nos permite crear software de manera ordenada y rpida. Adems que nos genera un cdigo legible. - La aplicacin del las diferentes teoras de la POO nos permiti crear diversos tipos de datos con comportamiento especifico. - El software resultante aun no llego a ser terminado por completo, pero seguiremos trabajando para implementar mas funciones para nuestra prxima versin. 5. REFERENCIAS

[1] Samuel Gutirrez Revenga, Algoritmos de Bsqueda en Profundidad y en Anchura, Espaa, Octubre 2002 [2] Universidad Politcnica de Catalunya, Departamento de LSI, rboles de recubrimiento de Coste Mnimo, Espaa 2005

Fig. 10. Ubicacin inicial del sujeto

[3] Universidad de Antioquia, Teora de Redes, rboles, Antioquia 2003 [4] Samuel Gutirrez Revenga, Algoritmos de Dijkstra, Espaa, Octubre 2002 [5] Prez Martn Raquel, Emparejamiento de Grafos, Trabajo de fin de Carrera, Santiago de Chile, Diciembre 2004.

Fig. 11. El Sujeto encuentra su objetivo

Вам также может понравиться