ORDENACIÓN TOPOLOGICA MEDIANTE ALGORITMOS DE GRAFOS 1. INTRODUCCIÓN 1.1. Relación entre Topología y los grafos 2. CONCEPTOS PREVIOS 2.1. Grafos 2.2. Teoría de Grafos 2.3. Grafo Dirigido Acíclico 2.4. Topología ” 2.5. Espacios Topológicos 2.6. Orden Topológico 3. HISTORIA 3.1. Estudios iniciales 3.2. Problemas en Topología 4. ORDENACIÓN TOPOLÓGICA 4.1. 5. EJEMPLO CLARIFICADOR 5.1. Caso Práctico 6. ALGORITMOS 6.1. Algoritmo de Tarjan 7. APLICACIONES 7.1. Vida Cotidiana 7.2. Informática 7.3. Social 7.4. Ingeniería Civil 8. CÓDIGO C++ 8.1. Librería de Ruby 9. APPLET 9.1. Applet n°1 10. INFORME 10.1. Link 11. REFERENCIAS 11.1. Web Links 11.2. Libros 1 Introduccion La ordenación topológica mediante algoritmos de grafos es una utilidad que facilita la toma de decisiones. Es uno de los algoritmos más conocidos de grafos, el cual se emplea para hallar un orden en una lista de todos los nodos del grafo (dirigido acíclico) de tal forma que sea visitado antes que sus predecesores (padres) Hoy en día la toma de decisiones es muy importante ya sea en la vida empresarial o en la doméstica, por supuesto que en la empresarial la complejidad es mucho mayor, ya que hay una gran cantidad de tareas a llevar a cabo. Éstas tareas que hay que cumplir tienen un orden dado, normalmente dicho orden es aplicado automáticamente. Que pasaría en el caso de una empresa que tiene muchas mas tareas, y cada una de ellas con diferentes criterios a cumplir antes de ser llevadas a cabo, dichos criterios solo podrían ser cumplidos si llevamos a cabo otras tareas dicho de paso que para realizarlas también debemos realizar otras. Este ambiente en el que hay muchos eventos, y no tenemos un orden aparente, sino criterios de los cuales debemos evaluar para conseguir llegar a culminar todo a tiempo, es donde encaja perfectamente la Ordenación topológica. La planificación o programación de algunas actividades o eventos es un problema que puede ser resuelto aplicando la ordenación topológica. Para ello solo tenemos que hacer uso de los grafos, cada evento un nodo, los criterios a tomar en cuenta serían aristas dirigidas como una frase de "necesario para", ésto crea una dependencia, claro que es de sobreentender que hecho ya una actividad no podemos volver a realizarla, sería ilógico pagar el recibo de luz luego pagar el de agua luego nuevamente el de la luz. Esto quiere decir que hay una dirección y un inicio y un final. 2 Conceptos Previos: Para poder entrar en el estudio de la ordenación Topológica mediante algoritmos de Grafos, necesitamos conocer algunos conceptos previos, básicos y fundamentales para el entendimiento del tema. Como lo son los grafos, las topologías, qué es un orden topológico, qué tipos de grafos existen, y relacionar ambos... 2.1 Grafo: En matemáticas y ciencias de la Computación un grafo (del griego grafos: dibujo, imagen) o gráfica es el principal objeto de estudio de la Teoría de Grafos Informalmente, un grafo es un conjunto de objetos llamados Vértices o Nodos unidos por enlaces llamados aristas o arcos que permiten representar relaciones Binarias entre elementos de un Conjunto. Típicamente, un grafo se representa gráficamente como un conjunto de puntos (vértices o nodos) unidos por líneas (aristas). Desde un punto de vista práctico, los grafos permiten estudiar las interrelaciones entre unidades que interactúan unas con otras. Por ejemplo, una red de computadoras puede representarse y estudiarse mediante un grafo, en el cual los vértices representan Terminales y las aristas representan conexiones (las cuales, a su vez, pueden ser Cables o conexión inalámbrica). Prácticamente cualquier problema puede representarse mediante un grafo, y su estudio trasciende a las diversas áreas de las ciencias exactas y las ciencias sociales. En la figura, V = { a, b, c, d, e, f }, y A = { ab, ac, ae, bc, bd, df, ef }. Un grafo es una pareja de conjuntos G = (V,A), donde V es el conjunto de vértices, y A es el conjunto de aristas, este último es un conjunto de pares de la forma ( u,v) tal que tal que Para simplificar, notaremos la arista (a,b) como ab. 2.2 Teoría de Grafos: En teoría de grafos, sólo queda lo esencial del dibujo: la forma de las aristas no son relevantes, sólo importa a qué vértices están unidas. La posición de los vértices tampoco importa, y se puede variar para obtener un dibujo más claro. Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red de carreteras que conecta ciudades, una red eléctrica o la red de drenaje de una ciudad. Aristas dirigidas y no dirigidas En algunos casos es necesario asignar un sentido a las aristas, por ejemplo, si se quiere representar la red de las calles de una ciudad con sus direcciones únicas. El conjunto de aristas será ahora un subconjunto de todos los posibles pares ordenados de vértices, con (a, b) ≠ (b, a). Los grafos que contienen aristas dirigidas se denominan grafos orientados, como el siguiente: Las aristas no orientadas se consideran bidireccionales para efectos prácticos (equivale a decir que existen dos aristas orientadas entre los nodos, cada una en un sentido). En el grafo anterior se ha utilizado una arista que tiene sus dos extremos idénticos: es un lazo (o bucle), y aparece también una arista bidireccional, y corresponde a dos aristas orientadas. Aquí V = { a, b, c, d, e }, y A = { (a, c), (d, a), (d, e), (a, e), (b, e), (c, a), (c, c), (d, b) . Se considera la característica de "grado" (positivo o negativo) de un vértice v (y se indica como (v)), como la cantidad de aristas que llegan o salen de él; para el caso de grafos no orientados, el grado de un vértice es simplemente la cantidad de aristas incidentes a este vértice. Por ejemplo, el grado positivo (salidas) de d es 3, mientras que el grado negativo (llegadas) de d es 0. 2.3 Grafo acíclico dirigido: En ciencias de la computación y matemáticas un grafo acíclico dirigido (o gráfico dirigido acíclico) conocido como DAG por sus siglas en inglés, es un grafo dirigido que no tiene ciclos; esto significa que para cada vértice v, no hay un camino directo que empiece y termine en v. Los DAG aparecen en modelos donde no tiene sentido que un vértice tenga un camino directo a él mismo; por ejemplo, si un arco u→v indica que v es parte de u, crear un ciclo v→u indicaría que u es subconjunto de sí mismo y de v, lo cual Cada es imposible. DAG da Informalmente lugar a un un DAG "fluye" ordenamiento en solo una dirección. parcial ≤ sobre sus vértices, donde u ≤ v exactamente cuando existe un camino directo desde u a v. Muchos DAG pueden generar el mismo ordenamiento parcial de los vértices siendo el de menor número de arcos denominado la reducción transitiva y el que mayor número de arcos la Clausura transitiva. En particular, la clausura transitiva es el orden de accesibilidad ≤. Archivo:Directed acyclic graph.png Terminología: Una fuente es un vértice sin flujos (relaciones) de entrada, mientras que un sifón es un vértice sin flujos (relaciones) de salida. Un DAG finito tiene por lo menos una fuente y un sifón. La profundidad de un vértice, en un DAG finito, es la longitud del camino más largo que existe desde una fuente a dicho vértice, la altura de un vértice es la longitud más larga del camino que exista desde el vértice a un sifón. La longitud de una DAG finito es la longitud (número de arcos) del camino directo más largo. Dicha longitud es igual a la máxima altura de todas las fuentes e igual a la máxima profundidad de todas los sifones. 2.4 Topología Definición Rama de la matemática que estudia las propiedades del espacio que son invariantes por homeomorfismos. Se trata de propiedades no métricas, es decir, de propiedades cualitativas, y no cuantitativas, lo que la distingue de la geometría común. Se la suele denominar "geometría débil" o "geometría del caucho". Por ejemplo, una circunferencia es topológicamente equivalente a un cuadrado, por más que sus propiedades métricas sean diferentes. La Topología es el estudio de aquellas propiedades de los cuerpos geométricos que permanecen inalteradas por transformaciones continuas. Es una disciplina matemática que estudia las propiedades de los espacios topológicos y las funciones continuas. La Topología se interesa por conceptos como proximidad, número de agujeros, el tipo de consistencia (o textura) que presenta un objeto, comparar objetos y clasificar, entre otros múltiples atributos donde destacan conectividad, compacidad, metricidad o metrizabilidad, etcétera. Ilustración del Teorema de los cuatro colores Los matemáticos usan la palabra topología con dos sentidos: informalmente es el sentido arriba especificado, y de manera formal se refieren a una cierta familia de subconjuntos de un conjunto dado, familia que cumple unas reglas sobre la unión y la intersección. Este segundo sentido puede verse desarrollado en el artículo espacio topológico. Un ejemplo Plano del metro de Madrid. Observemos un antiguo plano del metro de Madrid. En él están representadas las estaciones y las líneas de metro que las unen, pero no es geométricamente exacto. La curvatura de las líneas de metro no coincide, ni su longitud a escala, ni la posición relativa de las estaciones... Pero aún así es un plano perfectamente útil. Sin embargo, este plano es exacto en cierto sentido pues representa fielmente cierto tipo de información, la única que necesitamos para decidir nuestro camino por la red de metro: información topológica. 2.5 Espacios Topológicos: Un espacio topológico es una estructura matemática que permite la definición formal de conceptos como convergencia,conectividad, ycontinuidad. La rama de las matemáticas que estudia los espacios topológicos se llama topología. Un espacio topológico es un conjunto E de elementos junto con T, una colección de subconjuntos de E que satisfacen las siguientes propiedades: 1. El conjunto vacío y E están en T. quad varnothing in T, E in T 2. La intersección de cualquier colección finita de conjuntos de T está también en T. quad (O_1 in T, O_2 in T) Rightarrow (O_1 cap O_2 in T) 3. La unión de toda colección de conjuntos de T está también en T. quad (forall i in I, O_i in T) Rightarrow (cup_{iin I} O_i in T) Esta condición también se puede escribir: quad forall S subset cup_{Oin S} O in T T, Los conjuntos en T son los conjuntos abiertos, y sus complementos en E son llamados conjuntos cerrados. La colección T es llamada "topología" en E. Los elementos de E suelen llamarse puntos, aunque pueden ser cualquiera de los objetos matemáticos. Un espacio topológico en el cual los puntos son funciones es llamado un espacio funcional. Al conjunto E se le llama substrato del espacio topológico. Archivo:Topological space examples.svg 2.6 Orden Topológico: Un Orden Topológico es una secuencia lineal de eventos a realizarse, cuyo orden depende jerarquicamente de su relevancia para poder llevar a cabo cada uno de los eventos. Es así que un orden topológico es aplicado para buscar una viabilidad y orden en la resolución o puesta en marcha de cualquier evento. Suponga que S es un grafo tal que cada nodo vi de S representa una tarea y cada arista ( u, v ) significa que la finalización de la tarea u es un pre-requisito para que comience la tarea v. Suponga que tal grafo S contiene un ciclo tal que: P=( u, v, w, u ) Esto significa que no podemos empezar v hasta completar u, no podemos empezar w hasta terminar v y no podemos empezar u hasta completar w. Así no podemos completar ninguna tarea del ciclo. Por tanto, un grafo S así, que representa tareas y relaciones de precedencia, no puede tener ciclos. Ahora suponga que S es un grafo sin ciclos, considere la relación < sobre S definida como sigue: u < v si existe un camino de u a v Esta relación tiene las siguientes tres propiedades: 1. Para cada elemento u de S, tenemos que u < u. ( Irreflexivilidad ) 2. Si u < v, entonces v < u. ( Asimetría ) 3. Si u < v y v < w, entonces u < w. ( Transitividad ) Tal relación < sobre S se llama ordenación parcial de S, y S con tal ordenación se llama conjunto parcialmente ordenado o conjuntopo. Así, un grafo Ssin ciclos se puede considerar un conjunto parcialmente ordenado. Por lo tanto, puede también suponer que si S es un conjunto parcialmente ordenado con la ordenación parcial denotada por <,entonces S se puede considerar un grafo cuyos nodos son los elementos de S y cuyas aristas están definidas como sigue: ( u, v ) es una arista en S si u < v más aun, se puede demostrar que un conjunto S parcialmente ordenado, considerado como un grafo, no tiene ciclos. Como ejemplo podemos plantear que: sea S el grafo de la figura, observe que S no tiene ciclos. Así S se puede considerar un conjunto parcialmente ordenado. Note que G < C, ya que existe un camino desde G hasta C. Similarmente, B < F y B < C. Por otro lado B no es menor que A, ya que no existe camino de B a A, al igual que A no es menor que B. Por lo tanto; sea S un grafo dirigido sin ciclos (o conjunto parcialmente ordenado). Una ordenación topológica T de S es una ordenación lineal de los nodos de S que preserva la ordenación parcial de S original, o sea, que si u < v en S (si hay un camino de ua v en S), entonces u va delante de la v el la ordenación lineal T, este se muestra en la siguiente figura, donde se incluyen las aristas para indicar que concuerdan con la dirección de la ordenación lineal. 3 HISTORIA DE LA TOPOLOGÍA 3.1 Estudios iniciales: Históricamente, las primeras ideas topológicas conciernen al concepto de límite y al de completitud de un espacio métrico, y se manifestaron principalmente en la crisis de los inconmesurables descubiertos por Pitágoras ante la aparición de números reales no racionales. El primer acercamiento concreto al concepto de límite y también al de integral aparece en el método de exhaución de Arquímedes. La aparición del Análisis Matemático en el siglo XVII puso en evidencia la necesidad de formalizar el concepto de proximidad y continuidad, y la incapacidad de la Geometría para tratar este tema. Fue precisamente la fundamentación del Cálculo Infinitesimal, así como los intentos de formalizar el concepto de variedad en Geometría lo que llevó a la aparición de la Topología, a finales del siglo XIX y principios del XX. El término topología lo acuña por primera vez Johan Bennedict Listing, en 1836 en una carta1 a su antiguo profesor Müller, y posteriormente en su libro Vorstudien zur Topologie (Estudios previos a la Topología), publicado en 1847. Anteriormente se la denominaba analysis situs. Maurice Fréchet introdujo el concepto de espacio métrico en 1906. El origen de la Topología como disciplina científica lo inagura la resolución por parte de Euler del problema de los Puentes de Königsberg, en 1735. Ciertamente, la resolución de Euler del problema utiliza un planteamiento topológico. La característica de Euler, el primer invariante de la Topología Algebraica. La situación es exactamente análoga a la del cálculo del área de la elipse por Arquímedes. 3.2 Problemas en Topología: Problema de los Puentes de Koeniegsberg: El primer ejemplo satisfactorio para establecer el punto de partida de la topología es el famoso problema de los puentes de Koenigsberg, un problema que despertaba la curiosidad de muchas personas de la época de cuya naturaleza topológica fue apreciada más tarde. El problema planteaba que dado un sistema de puentes como en la figura, si era posible que una persona cruzara cada uno de estos puentes una sola vez. El matemático suizo Leonhard Euler encontró la solución en 1735. La idea para resolverlo fue la simplificación de la representación del problema reemplazando las “áreas” con puntos y los puentes con aristas. La pregunta que Euler se planteó fue si podría describir esta figura sin levantar el lápiz del papel de manera que cruzáramos una sola vez por cada vértice y arista. El mismo Euler formuló el siguiente problema mucho más general: “Dada una configuración cualquiera del río y de los brazos en los que pudiera dividirse, así como un número cualquiera de puentes, determinar si es o no posible cruzar cada puente exactamente una vez”. Ofreció una solución que resolvía el problema en muchas situaciones: “Cuando el número de puentes es impar, lo aumento en uno y lo divido por dos, cuando el número es par, lo divido simplemente por dos. Entonces, si la suma de los números resultantes es igual a la suma de los puentes más uno, el camino puede realizarse, si bien ha de comenzar en una región a la que conduzca un número impar de puentes pero si la suma es una unidad menor que el número de puentes más uno, el camino es posible si su punto inicial es una región a la que conduzca un número par de puentes, ya que en este caso la suma se incrementa de nuevo en una unidad”. Podemos decir, por tanto, que la solución de Euler convierte un problema geométrico en principio, en uno de naturaleza combinatoria. El problema de los cuatro colores:Otro problema interesante que se puede reducir a un problema de grafos, pero en este caso mucho más complicado, es el Problema de los cuatro colores. En 1850. Francis Guthrie, pregunto a su hermano Frederick, en aquel momento estudiante de Augustus de Morgan, el porqué cuatro colores bastaban para colorear cualquier mapa, esto es, sin que dos paises colindantes tuviesen el mismo color. Kenneth Appel y Wolfgang Haken demostraron finalmente en 1976 que sí es posible, reduciendo el problema a un número finito de casos que se resolvieron con la ayuda de un ordenador, el cuál necesitó nada menos que 1200 horas de cálculos. 4 Ordenación Topológica La ordenación topológica es un sistema de ordenamiento de un grafo acíclico, es decir, que no tiene ciclos; el cual consiste, en organizar de forma lineal ó en lista ascendente ó descendente, una serie de vértices en desorden, para lo cual primero debe de empezar de un "vértice padre" osea, un vértice sin predecesores, y después visitar a sus vecinos,después de que haya visitado a tos sus vecinos, pasa a analizar otro vértice, y de igual forma identifica todos sus vecinos, y así recursivamente, hasta que haya visitado a todos los vértices. En pocas palabras no se visitara un vértice, hasta que todos sus predecesores hayan sido visitados. Después de que ya han sido visitados todos losvértices del grafo dirigido, se acomodan en lista ya sea d forma ascendente o descendente, según se requiera, y se acomodan en base a el coste de tiempo de los vértices. � Para un digrafo acíclico (dag) G = (N, A) el orden lineal de todos los nodos tal que si G contiene el arco (u, v), entonces u aparece antes de v en el orden dado. � Si G tiene ciclos el orden lineal no es posible.� Ordenamiento topológico de todos los nodos de un digrafo es una manera de visitar todos sus nodos, uno por uno, en una secuencia que satisface una restricción dada.� Un orden topológico de los nodos de un digrafo G={N, A} es una secuencia (n1, n2, …, nk) tal que N= {n1, n2, …, nk} y para todo (ni, nj) en N, ni precede a nj en la secuencia. Teniendo una gráfica acíclica dirigida (DAG, por sus siglas en inglés), nos interesa encontrar una forma en que podamos acomodar los vértices en línea recta de tal forma que la dirección de los arcos siempre apunte hacia un mismo lado. Un ejemplo de cuando se dan este tipo de gráficas, es en las materias de estudios superiores. Se tienen que tomar algunas materias antes que otras (materias seriadas), pero nunca se puede formar un ciclo (o no se podrían estudiar estas materias). Como no hay forma en que nos podamos regresar, podemos ver a este tipo de gráfica en forma similar a un árbol. Podemos utilizar cualquier forma de recorrer un árbol para encontrar el ordenamiento topológico, pero es más conveniente utilizar una búsqueda en profundidad ya que es más fácil de implementar. El orden Topológico Seria: Ejemplo: Este es un ejemplo común aplicado a la vida diaria, tan simple de como vestirse. Arriba de cada vértice se muestra el coste de tiempo. Distancia / Finalización El algoritmo nos devuelve una lista enlazada, con los nodos del grafo, en orden decreciente en tiempo de finalización. Una vez ya ordenado topologicamente se pueden ver las precedencias de las tareas: 1. Ponerse la camisa antes que el cinturón y el jersey. 2. Ponerse el pantalón antes que los zapatos y elcinturón. 3. Ponerse los calcetines antes que los zapatos.Un Orden Topológico ordena los nodos de un grafo dirigido acíclico de forma que si hay una camino del nodo A al nodo B entonces A aparece antes que B en la ordenación. El sentido de las flechas indica las dependencias. A depende de B y C, B depende de C, etc, etc. La librería standard de Ruby tiene un módulo (TSort) que implementa el orden topológico usando el algoritmo de Tarjan y nos ofrece una interfaz para utilizarlo.El módulo TSort está diseñado para ser utilizado con cualquier objeto que pueda ser modelado como un grafo dirígido. 5 Ejemplo Clarificador 5.1 Caso práctico Ordenamiento topológico de un grafo Problema: Existen varios problemas en las cuales no es posible iniciar una actividad sin antes haber terminado otra. Un problema que ya seguramente h podido apreciar es el de determinar el orden en el cual usted podrá tomar cursos. Algunos tienen prerrequisitos. Otros más de un prerrequisito. Y adicionalmente los prerrequisitos pueden tener a su vez prerrequisitos del plan de estudios de la carrera de Ingeniería de Software de la universidad tecnológica del Perú Los grafos que se muestran en la figura se conocen como grafos acíclicos dirigidos (DAG). Se trata de grafos dirigidos que no contienen ciclos, de, modo que una vez que se pasa por un vértice, no hay trayectoria de regreso a ese vértice Ejemplo de grafo acíclico dirigido Prerrequisitos del Plan de estudios 7 Aplicaciones: Las imágenes 2-dimensionales son las mas ampliamente estudiadas, aunque últimamente las 3-dimensionales están siendo muy utilizadas. También se utilizan imágenes 4-dimensionales para representar imágenes 3-dimensionales en movimiento. De las estrategias planteadas, la primera y las más utilizada es la introducida por Azriel Rosenfeld en 1970. Se basa en la noción de adyacencia entre puntos de Zn (además de Zn también considera en ocasiones los centros de una teselación del plano por hexágonos). Su enfoque descansa principalmente en nociones de Teoría de Grafos. Desde entonces la Topología Digital ha proporcionado los fundamentos teóricos para importantes operaciones de procesamiento de imagen, como recuento de objetos, adelgazamiento de imágenes, detección de bordes y relleno de contornos. El adelgazamiento de imágenes es una operación de preprocesamiento en reconocimiento de formas. Su objetivo es reducir el conjunto de puntos de la imagen sin alterar la topología de la misma. � Modelado de actividades para resolver problemas de planificación o programación de las mismas siguiendo un criterio de minimización o maximización. � Evaluación de expresiones aritméticas (- b + sqrt( b * b - 4 * a * c)) / 2 * a ( - b - sqrt(b * b - 4 * a * c)) / 2 * a 8 Código: Codigo java: class Vertex { public char label; public Vertex(char lab) { label = lab; } } public class GraphTS { private final int MAX_VERTS = 20; private Vertex vertexList[]; list of vertices private int matrix[][]; adjacency matrix private int numVerts; current number of vertices private char sortedArray[]; public GraphTS() { vertexList = new Vertex[MAX_VERTS]; matrix = new int[MAX_VERTS][MAX_VERTS]; numVerts = 0; for (int i = 0; i < MAX_VERTS; i++) for (int k = 0; k < MAX_VERTS; k++) matrix[i][k] = 0; sortedArray = new char[MAX_VERTS]; sorted vert labels } public void addVertex(char lab) { vertexList[numVerts++] = new Vertex(lab); } public void addEdge(int start, int end) { matrix[start][end] = 1; } public void displayVertex(int v) { System.out.print(vertexList[v].label); } public void topo() toplogical sort { int orig_nVerts = numVerts; while (numVerts > 0) while vertices remain, { get a vertex with no successors, or -1 int currentVertex = noSuccessors(); if (currentVertex == -1) must be a cycle { System.out.println("ERROR: Graph has cycles"); return; } insert vertex label in sorted array (start at end) sortedArray[numVerts - 1] = vertexList[currentVertex].label; deleteVertex(currentVertex); delete vertex } vertices all gone; display sortedArray System.out.print("Topologically sorted order: "); for (int j = 0; j < orig_nVerts; j++) System.out.print(sortedArray[j]); System.out.println(""); } public int noSuccessors() returns vert with no successors (or -1 if no such verts) { boolean isEdge; edge from row to column in adjMat for (int row = 0; row < numVerts; row++) { isEdge = false; check edges for (int col = 0; col < numVerts; col++) { if (matrix[row][col] > 0) if edge to another, { isEdge = true; break; this vertex has a successor try another } } if (!isEdge) if no edges, has no successors return row; } return -1; no } public void deleteVertex(int delVert) { if (delVert != numVerts - 1) if not last vertex, delete from vertexList { for (int j = delVert; j < numVerts - 1; j++) vertexList[j] = vertexList[j + 1]; for (int row = delVert; row < numVerts - 1; row++) moveRowUp(row, numVerts); for (int col = delVert; col < numVerts - 1; col++) moveColLeft(col, numVerts - 1); } numVerts--; one less vertex } private void moveRowUp(int row, int length) { for (int col = 0; col < length; col++) matrix[row][col] = matrix[row + 1][col]; } private void moveColLeft(int col, int length) { for (int row = 0; row < length; row++) matrix[row][col] = matrix[row][col + 1]; } public static void main(String[] args) { GraphTS g = new GraphTS(); g.addVertex('A'); 0 g.addVertex('B'); 1 g.addVertex('C'); 2 g.addVertex('D'); 3 g.addVertex('E'); 4 g.addVertex('F'); 5 g.addVertex('G'); 6 g.addVertex('H'); 7 g.addEdge(0, 3); AD g.addEdge(0, 4); AE g.addEdge(1, 4); BE g.addEdge(2, 5); CF g.addEdge(3, 6); DG g.addEdge(4, 6); EG g.addEdge(5, 7); FH g.addEdge(6, 7); GH g.topo(); // do the sort } } 11 Referencias Web-links: Definición de topología http://www.topologia.org/historia_de_la_topologia.htm Historia de Topologiahttp://www.uam.es/personal_pdi/ciencias/ezuazua/informweb/trabajosdehi storia/HISTORIADELATOPOLOGIA.pdf Orden Topologico http://ldc.usb.ve/~carrasquel/Orden%20Topologico.pdf Ordenación Topológica y Algoritmos http://www.monografias.com/trabajos/grafos/grafos.shtml Material sobre Algoritmos de grafos Completo http://lcg.ciens.ucv.ve/~ernesto/nds/CotoND200302.pdf