 Un         grafo        G       es      una
  pareja G=(V,A), donde V es un conjunto
  finito (i.e vértices) y A es un subconjunto
  del conjunto de parejas no ordenadas
  de V (i.e arcos).
Por ejemplo G=({a,b,c},{{a,c},{c,b}}).
   Hay   tres   maneras     de      representar   un    grafo     en      un    programa:
    mediante matrices, mediante listas y mediante matrices dispersas.

   Representación mediante matrices: La forma más fácil de guardar la información de
    los nodos es mediante la utilización de un vector que indexe los nodos, de manera que
    los arcos entre los nodos se pueden ver como relaciones entre los índices. Esta relación
    entre índices se puede guardar en una matriz, que llamaremos de adyacencia.

   Representación mediante listas:    En las listas de adyacencia lo que haremos srá
    guardar por cada nodo, además de la información que pueda contener el propio
    nodo, una lista dinámica con los nodos a los que se puede acceder desde él. La
    información de los nodos se puede guardar en un vector, al igual que antes, o en otra
    lista dinámica.

   Representación mediante matrices dispersas:         Para evitar uno de los problemas que
    teníamos con las listas de adyacencia, que era la dificultad de obtener las relaciones
    inversas, podemos utilizar las matrices dispersas, que contienen tanta información como
    las matrices de adyacencia, pero, en principio, no ocupan tanta memoria como las
    matrices, ya que al igual que en las listas de adyacencia, sólo representaremos
    aquellos enlaces que existen en el grafo.
   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.
   En un grafo es un camino, una sucesión
    de aristas adyacentes, que visita todos
    los vértices del grafo una sola vez. Si
    además el último vértice visitado es
    adyacente al primero, el camino es
    un ciclo hamiltoniano.
   Un grafo que no tiene ciclos y que conecta a todos los puntos, se
    llama un árbol. En un grafo con n vértices, los árboles tienen
    exactamente n - 1 aristas, y hay nn-2 árboles posibles. Su
    importancia radica en que los árboles son grafos que conectan
    todos los vértices utilizando el menor número posible de aristas. Un
    importante campo de aplicación de su estudio se encuentra en
    el análisis filogenético, el de la filiación de entidades que derivan
    unas de otras en un proceso evolutivo, que se aplica sobre todo a
    la averiguación del parentesco entre especies; aunque se ha
    usado también, por ejemplo, en el estudio del parentesco entre
    lenguas.
      Una de las aplicaciones mas
    importantes es de hallar el camino mas
    corto hacia un destino, ya sea de una
    ciudad a otra, de unos departamentos a
    otros, para el recorrido de árboles, sirve
    para           la          representación
    de algoritmos, etc. Un ejemplo de esto
    es la tarea de freír un huevo.

Grafos

  • 1.
     Un grafo G es una pareja G=(V,A), donde V es un conjunto finito (i.e vértices) y A es un subconjunto del conjunto de parejas no ordenadas de V (i.e arcos). Por ejemplo G=({a,b,c},{{a,c},{c,b}}).
  • 2.
    Hay tres maneras de representar un grafo en un programa: mediante matrices, mediante listas y mediante matrices dispersas.  Representación mediante matrices: La forma más fácil de guardar la información de los nodos es mediante la utilización de un vector que indexe los nodos, de manera que los arcos entre los nodos se pueden ver como relaciones entre los índices. Esta relación entre índices se puede guardar en una matriz, que llamaremos de adyacencia.  Representación mediante listas: En las listas de adyacencia lo que haremos srá guardar por cada nodo, además de la información que pueda contener el propio nodo, una lista dinámica con los nodos a los que se puede acceder desde él. La información de los nodos se puede guardar en un vector, al igual que antes, o en otra lista dinámica.  Representación mediante matrices dispersas: Para evitar uno de los problemas que teníamos con las listas de adyacencia, que era la dificultad de obtener las relaciones inversas, podemos utilizar las matrices dispersas, que contienen tanta información como las matrices de adyacencia, pero, en principio, no ocupan tanta memoria como las matrices, ya que al igual que en las listas de adyacencia, sólo representaremos aquellos enlaces que existen en el grafo.
  • 3.
    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.
  • 4.
    En un grafo es un camino, una sucesión de aristas adyacentes, que visita todos los vértices del grafo una sola vez. Si además el último vértice visitado es adyacente al primero, el camino es un ciclo hamiltoniano.
  • 5.
    Un grafo que no tiene ciclos y que conecta a todos los puntos, se llama un árbol. En un grafo con n vértices, los árboles tienen exactamente n - 1 aristas, y hay nn-2 árboles posibles. Su importancia radica en que los árboles son grafos que conectan todos los vértices utilizando el menor número posible de aristas. Un importante campo de aplicación de su estudio se encuentra en el análisis filogenético, el de la filiación de entidades que derivan unas de otras en un proceso evolutivo, que se aplica sobre todo a la averiguación del parentesco entre especies; aunque se ha usado también, por ejemplo, en el estudio del parentesco entre lenguas.
  • 6.
    Una de las aplicaciones mas importantes es de hallar el camino mas corto hacia un destino, ya sea de una ciudad a otra, de unos departamentos a otros, para el recorrido de árboles, sirve para la representación de algoritmos, etc. Un ejemplo de esto es la tarea de freír un huevo.