[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53. graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.1 Introducción a graphs

El paquete graphs permite trabajar con estructuras de grafos y digrafos en Maxima. Tanto los grafos como los digrafos son de estructura simples (no tienen ni aristas múltiples ni bucles), pero los digrafos pueden tener una arista dirigida desde u hasta v y otra desde v hasta u.

Los grafos se representan internamente como listas de adyacencia y se implementan como estructuras de lisp. Los vértices se identifican por sus números de identificacin' (siempre enteros). Las aristas/arcos se representan por listas de longitud 2. Se pueden asignar etiquetas a los vértices de los grafos/digrafos y pesos a sus aristas/arcos.

La función draw_graph dibuja grafos siguiendo un criterio rdígido de posicionamiento de los vértices. También puede hacer uso del programa graphviz disponible en http://www.graphviz.org. La funcin' draw_graph utiliza el paquete draw de Maxima.

Para hacer uso de este paquete, ejecútese primero load(graphs).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2 Funciones y variables para graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2.1 Construyendo grafos

Función: create_graph (v_list, e_list)
Función: create_graph (n, e_list)
Función: create_graph (v_list, e_list, directed)

Crea un nuevo grafo sobre el conjunto de vértices v_list con aristas e_list.

v_list es una lista de vértices ([v1, v2,..., vn]) o una lista de vértices junto con sus respectivas etiquetas ([[v1,l1], [v2,l2],..., [vn,ln]]).

n es el número de vértices, los cuales se identificarán desde 0 hasta n-1.

e_list es una lista de aristas ([e1, e2,..., em]) o una lista de aristas con sus respectivas ponderaciones ([[e1, w1], ..., [em, wm]]).

Si directed is not false, se devolverá un grafo orientado.

Ejemplos:

Crea un ciclo de 3 vértices.

(%i1) load (graphs)$
(%i2) g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
(%i3) print_graph(g)$
Graph on 3 vertices with 3 edges.
Adjacencies:
  3 :  1  2
  2 :  3  1
  1 :  3  2

Crea un ciclo de 3 vértices y aristas ponderadas:

(%i1) load (graphs)$
(%i2) g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],
                                [[1,3], 3.0]])$
(%i2) get_edge_weight([2,3], g);
(%o2)                                 2.0

Crea un grafo orientado:

(%i1) load (graphs)$
(%i2) d : create_graph(
       [1,2,3,4], 
       [
        [1,3], [1,4],
        [2,3], [2,4]
       ],
       'directed = true)$
(%i3) print_graph(d)$
Digraph on 4 vertices with 4 arcs.
Adjacencies:
  4 :
  3 :
  2 :  4  3
  1 :  4  3
Función: copy_graph (g)

Devuelve una copia del grafo g.

Función: circulant_graph (n, d)

Devuelve un grafo cirlulante de parámetros n y d.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : circulant_graph(10, [1,3])$
(%i3) print_graph(g)$
Graph on 10 vertices with 20 edges.
Adjacencies:
  9 :  2  6  0  8
  8 :  1  5  9  7
  7 :  0  4  8  6
  6 :  9  3  7  5
  5 :  8  2  6  4
  4 :  7  1  5  3
  3 :  6  0  4  2
  2 :  9  5  3  1
  1 :  8  4  2  0
  0 :  7  3  9  1
Función: clebsch_graph ()

Devuelve el grafo de Clebsch.

Función: complement_graph (g)

Devuelve el complemento del grafo g.

Función: complete_bipartite_graph (n, m)

Devuelve el grafo bipartido completo de n+m vértices.

Función: complete_graph (n)

Devuelve el grafo completo de n vértices.

Función: cycle_digraph (n)

Devuelve el ciclo dirigido de n vértices.

Función: cycle_graph (n)

Devuelve el ciclo de n vértices.

Función: cube_graph (n)

Devuelve el cubo de n dimensiones.

Función: dodecahedron_graph ()

Devuelve el grafo del dodecaedro.

Función: empty_graph (n)

Devuelve el grafo vacío de n vértices.

Función: flower_snark (n)

Devuelve el grafo de flor de 4n vértices.

Ejemplo:

(%i1) load (graphs)$
(%i2) f5 : flower_snark(5)$
(%i3) chromatic_index(f5);
(%o3)                                  4
Función: from_adjacency_matrix (A)

Devuelve el grafo definido por la matriz de adyacencia A.

Función: frucht_graph ()

Devuelve el grafo de Frucht.

Función: graph_product (g1, g1)

Devuelve el producto dirigido de los grafos g1 y g2.

Ejemplo:

(%i1) load (graphs)$
(%i2) grid : graph_product(path_graph(3), path_graph(4))$
(%i3) draw_graph(grid)$

../figures/graphs01

Función: graph_union (g1, g1)

Devuelve la unión (suma) de los grafos g1 y g2.

Función: grid_graph (n, m)

Devuelve la rejilla n x m.

Función: grotzch_graph ()

Devuelve el grafo de Grotzch.

Función: heawood_graph ()

Devuelve el grafo de Heawood.

Función: icosahedron_graph ()

Devuelve el grafo del icosaedro.

Función: induced_subgraph (V, g)

Devuelve el grafo inducido por el subconjunto V de vértices del grafo g.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) V : [0,1,2,3,4]$
(%i4) g : induced_subgraph(V, p)$
(%i5) print_graph(g)$
Graph on 5 vertices with 5 edges.
Adjacencies:
  4 :  3  0
  3 :  2  4
  2 :  1  3
  1 :  0  2
  0 :  1  4
Función: line_graph (g)

Devuelve el grafo de línea del grafo g.

Función: mycielski_graph (g)

Devuelve el grafo de Mycielski del grafo g.

Función: new_graph ()

Devuelve el grafo sin vértices ni aristas.

Función: path_digraph (n)

Devuelve el camino dirigido de n vértices.

Función: path_graph (n)

Devuelve el camino de n vértices.

Función: petersen_graph ()
Función: petersen_graph (n, d)

Devuelve el grafo de Petersen P_{n,d}. Los valores por defecto para n y d son n=5 y d=2.

Función: random_digraph (n, p)

Devuelve un grafo aleatorio dirigido de n vértices. Cada arco se presenta con una probabilidad p.

Función: random_regular_graph (n)
Función: random_regular_graph (n, d)

Devuelve un grafo aleatorio d-regular de n vértices. El valor por defecto para d es d=3.

Función: random_graph (n, p)

Devuelve un grafo aleatorio de n vértices. Cada arco se presenta con una probabilidad p.

Función: random_graph1 (n, m)

Devuelve un grafo aleatorio de n vértices y m arcos aleatorios.

Función: random_network (n, p, w)

Devuelve una red aleatoria de n vértices. Cada arco se presenta con probabilidad p y tiene un peso dentro del rango [0,w]. La función devuelve una lista [network, source, sink].

Ejemplo:

(%i1) load (graphs)$
(%i2) [net, s, t] : random_network(50, 0.2, 10.0);
(%o2)                         [DIGRAPH, 50, 51]
(%i3) max_flow(net, s, t)$
(%i3) first(%);
(%o3)                          36.458293875923
Función: random_tournament (n)

Devuelve un torneo aleatorio de n vértices.

Función: random_tree (n)

Devuelve un árbol aleatorio de n vértices.

Función: underlying_graph (g)

Devuelve el grafo asociado al grafo orientado g.

Función: wheel_graph (n)

Devuelve el grafo de rueda de n+1 vértices.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2.2 Propiedades de los grafos

Función: adjacency_matrix (gr)

Devuelve la matriz de adyacencia del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) c5 : cycle_graph(4)$
(%i3) adjacency_matrix(c5);
                                [ 0  1  0  1 ]
                                [            ]
                                [ 1  0  1  0 ]
(%o3)                           [            ]
                                [ 0  1  0  1 ]
                                [            ]
                                [ 1  0  1  0 ]
Función: average_degree (gr)

Devuelve el grado medio de los vértices del garfo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) average_degree(grotzch_graph());
                                      40
(%o2)                                 --
                                      11
Función: biconected_components (gr)

Devuelve los subconjuntos de vértices biconectados del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i4) g : create_graph(
            [1,2,3,4,5,6,7],
            [
             [1,2],[2,3],[2,4],[3,4],
             [4,5],[5,6],[4,6],[6,7]
            ])$
(%i5) biconnected_components(g);
(%o5)               [[6, 7], [4, 5, 6], [1, 2], [2, 3, 4]]

../figures/graphs13

Función: bipartition (gr)

Devuelve una bipartición de los vértices del grafo gr, o una lista vacía si gr no es bipartido.

Ejemplo:

(%i1) load (graphs)$
(%i2) h : heawood_graph()$
(%i3) [A,B]:bipartition(h);
(%o3)         [[8, 12, 6, 10, 0, 2, 4], [13, 5, 11, 7, 9, 1, 3]]
(%i4) draw_graph(h, show_vertices=A, program=circular)$

../figures/graphs02

Función: chromatic_index (gr)

Devuelve el índice cromático del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) chromatic_index(p);
(%o3)                                  4
Función: chromatic_number (gr)

Devuelve el número cromático del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) chromatic_number(cycle_graph(5));
(%o2)                                  3
(%i3) chromatic_number(cycle_graph(6));
(%o3)                                  2
Función: clear_edge_weight (e, gr)

Elimina el peso del arco e del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
(%i3) get_edge_weight([0,1], g);
(%o3)                                 1.5
(%i4) clear_edge_weight([0,1], g)$
(%i5) get_edge_weight([0,1], g);
(%o5)                                  1
Función: clear_vertex_label (v, gr)

Elimina la etiqueta del vértice v del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
(%i3) get_vertex_label(0, g);
(%o3)                               Zero
(%i4) clear_vertex_label(0, g);
(%o4)                               done
(%i5) get_vertex_label(0, g);
(%o5)                               false
Función: connected_components (gr)

Devuelve las componentes conexas del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g: graph_union(cycle_graph(5), path_graph(4))$
(%i3) connected_components(g);
(%o3)                  [[1, 2, 3, 4, 0], [8, 7, 6, 5]]
Función: diameter (gr)

Devuelve el diámetro del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) diameter(dodecahedron_graph());
(%o2)                                 5
Función: edge_coloring (gr)

Devuelve una coloración óptima de los arcos del grafo gr.

La función devuelve el índice cromático y una lista que representa el coloreado de los arcos de g.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) [ch_index, col] : edge_coloring(p);
(%o3) [4, [[[0, 5], 3], [[5, 7], 1], [[0, 1], 1], [[1, 6], 2],
[[6, 8], 1], [[1, 2], 3], [[2, 7], 4], [[7, 9], 2],
 [[2, 3], 2], [[3, 8], 3], [[5, 8], 2], 
[[3, 4], 1], [[4, 9], 4], [[6, 9], 3], [[0, 4], 2]]]
(%i4) assoc([0,1], col);
(%o4)                                 1
(%i5) assoc([0,5], col);
(%o5)                                 3
Función: degree_sequence (gr)

Devuelve una lista con los grados de los vértices del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) degree_sequence(random_graph(10, 0.4));
(%o2)                  [3, 3, 3, 4, 4, 4, 5, 5, 6, 7]
Función: edges (gr)

Devuelve la lista de las aristas (arcos) del grafo (dirigido) gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) edges(complete_graph(4));
(%o2)         [[2, 3], [1, 3], [1, 2], [0, 3], [0, 2], [0, 1]]
Función: get_edge_weight (e, gr)
Función: get_edge_weight (e, gr, ifnot)

Devuelve el peso de la arista e del grafo gr.

Si la arista no tiene peso, la función devuelve 1. Si la arista no pertenece al grafo, la función emite un mensaje de error o devuelve el argumento opcional ifnot.

Ejemplo:

(%i1) load (graphs)$
(%i2) c5 : cycle_graph(5)$
(%i3) get_edge_weight([1,2], c5);
(%o3)                                 1
(%i4) set_edge_weight([1,2], 2.0, c5);
(%o4)                               done
(%i5) get_edge_weight([1,2], c5);
(%o5)                                2.0
Función: get_vertex_label (v, gr)

Devuelve la etiqueta del vértice v del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
(%i3) get_vertex_label(0, g);
(%o3)                               Zero
Función: graph_charpoly (gr, x)

Devuelve el polinomio característico (de variable x) del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_charpoly(p, x), factor;
                                         5        4
(%o3)                     (x - 3) (x - 1)  (x + 2)
Función: graph_center (gr)

Devuelve el centro del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : grid_graph(5,5)$
(%i3) graph_center(g);
(%o3)                               [12]
Función: graph_eigenvalues (gr)

Devuelve los valores propios del grafo gr. La función devuelve los valores propios en el mismo formato en el que lo hace la función eigenvalue.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_eigenvalues(p);
(%o3)                     [[3, - 2, 1], [1, 4, 5]]
Función: graph_periphery (gr)

Devuelve la periferia del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : grid_graph(5,5)$
(%i3) graph_periphery(g);
(%o3)                          [24, 20, 4, 0]
Función: graph_size (gr)

Devuelve el número de vértices del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_size(p);
(%o3)                                10
Función: graph_order (gr)

Devuelve el número de aristas del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_order(p);
(%o3)                                15
Función: girth (gr)

Devuelve la longitud del ciclo más corto del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : heawood_graph()$
(%i3) girth(g);
(%o3)                                 5
Función: hamilton_cycle (gr)

Devuelve el ciclo de Hamilton del grafo gr o una lista vacía si gr no es hamiltoniano.

Ejemplo:

(%i1) load (graphs)$
(%i2) h : cube_graph(3)$
(%i3) hc : hamilton_cycle(h);
(%o3)        [7, 3, 2, 6, 4, 0, 1, 5, 7]
(%i4) draw_graph(c, show_edges=vertices_to_cycle(hc))$

../figures/graphs03

Función: hamilton_path (gr)

Devuelve el camino de Hamilton del grafo gr o una lista vacía si gr no los tiene.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) hp : hamilton_path(p);
(%o3)                  [0, 5, 7, 2, 1, 6, 8, 3, 4, 9]
(%i4) draw_graph(p, show_edges=vertices_to_path(hp))$

../figures/graphs04

Función: isomorphism (gr1, gr2)

Devuelve una tabla (hash table) representando un isomorfismo entre los grafos/digrafos gr1 y gr2. Si no son isomorfos, devuelve false.

Ejemplo:

(%i1) load (graphs)$
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
(%i2) hash_table_data(isomorphism(clk5, petersen_graph()));
(%o2) [9 -> 0, 2 -> 1, 6 -> 2, 5 -> 3, 0 -> 4, 1 -> 5, 3 -> 6, 
                                     4 -> 7, 7 -> 8, 8 -> 9]
Función: in_neighbors (v, gr)

Devuelve la lista de los nodos hijos del vértice v del grafo orientado gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : path_digraph(3)$
(%i3) in_neighbors(2, p);
(%o3)                                 [1]
(%i4) out_neighbors(2, p);
(%o4)                                 []
Función: is_biconnected (gr)

Devuelve true si gr está biconectado y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i3) is_biconnected(cycle_graph(5));
(%o3)                               true
(%i4) is_biconnected(path_graph(5));
(%o4)                               false
Función: is_bipartite (gr)

Devuelve true si gr es bipartido (2-coloreable) y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_bipartite(petersen_graph());
(%o2)                               false
(%i3) is_bipartite(heawood_graph());
(%o3)                               true
Función: is_connected (gr)

Devuelve true si el grafo gr es conexo y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_connected(graph_union(cycle_graph(4), path_graph(3)));
(%o2)                               false
Función: is_digraph (gr)

Devuelve true si gr es un grafo orientado (digrafo) y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_digraph(path_graph(5));
(%o2)                               false
(%i3) is_digraph(path_digraph(5));
(%o3)                               true
Función: is_edge_in_graph (e, gr)

Devuelve true si e es una arista (arco) del grafo (digrafo) g y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) c4 : cycle_graph(4)$
(%i3) is_edge_in_graph([2,3], c4);
(%o3)                               true
(%i4) is_edge_in_graph([3,2], c4);
(%o4)                               true
(%i5) is_edge_in_graph([2,4], c4);
(%o5)                               false
(%i6) is_edge_in_graph([3,2], cycle_digraph(4));
(%o6)                               false
Función: is_graph (gr)

Devuelve true si gr es un grafo y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_graph(path_graph(5));
(%o2)                               true
(%i3) is_graph(path_digraph(5));
(%o3)                               false
Función: is_graph_or_digraph (gr)

Devuelve true si gr es una grafo, orientado o no, y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_graph_or_digraph(path_graph(5));
(%o2)                               true
(%i3) is_graph_or_digraph(path_digraph(5));
(%o3)                               true
Función: is_isomorphic (gr1, gr2)

Devuelve true si los grafos/digrafos gr1 y gr2 son isomorfos y false en caso contrario.

Véase también isomorphism.

Ejemplo:

(%i1) load (graphs)$
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
(%i3) is_isomorphic(clk5, petersen_graph());
(%o3)                              true
Función: is_planar (gr)

Devuelve true si gr es un grafo planar y false en caso contrario.

El algoritmo utilizado es el de Demoucron, que es de tiempo cuadrático.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_planar(dodecahedron_graph());
(%o2)                                true
(%i3) is_planar(petersen_graph());
(%o3)                                false
(%i4) is_planar(petersen_graph(10,2));
(%o4)                                true
Función: is_sconnected (gr)

Devuelve true si el grafo orientado gr es fuertemente conexo, devolviendo false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_sconnected(cycle_digraph(5));
(%o2)                               true
(%i3) is_sconnected(path_digraph(5));
(%o3)                               false
Función: is_vertex_in_graph (v, gr)

Devuelve true si v es un vértice del grafo g y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) c4 : cycle_graph(4)$
(%i3) is_vertex_in_graph(0, c4);
(%o3)                               true
(%i4) is_vertex_in_graph(6, c4);
(%o4)                               false
Función: is_tree (gr)

Devuelve true si gr es un árbol y false en caso contrario.

Ejemplo:

(%i1) load (graphs)$
(%i2) is_tree(random_tree(4));
(%o2)                               true
(%i3) is_tree(graph_union(random_tree(4), random_tree(5)));
(%o3)                               false
Función: laplacian_matrix (gr)

Devuelve el laplaciano de la matriz del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) laplacian_matrix(cycle_graph(5));
                          [  2   - 1   0    0   - 1 ]
                          [                         ]
                          [ - 1   2   - 1   0    0  ]
                          [                         ]
(%o2)                     [  0   - 1   2   - 1   0  ]
                          [                         ]
                          [  0    0   - 1   2   - 1 ]
                          [                         ]
                          [ - 1   0    0   - 1   2  ]
Función: max_clique (gr)

Devuelve el clique máximo del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : random_graph(100, 0.5)$
(%i3) max_clique(g);
(%o3)                 [2, 6, 13, 17, 21, 23, 31, 62, 65]
Función: max_degree (gr)

Devuelve el grado máximo de los vértices del grafo gr y un vértice de grado máximo.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : random_graph(100, 0.02)$
(%i3) max_degree(g);
(%o3)                               [5, 95]
(%i4) vertex_degree(95, g);
(%o4)                                  5
Función: max_flow (net, s, t)

Devuelve el flujo maximal de la red net con origen en s y final en t.

La función devuelve el valor del flujo maximal y una lista con los pesos de los arcos del flujo óptimo.

Ejemplo:

Example:

(%i1) load (graphs)$
(%i2) net : create_graph(
  [1,2,3,4,5,6],
  [[[1,2], 1.0],
   [[1,3], 0.3],
   [[2,4], 0.2],
   [[2,5], 0.3],
   [[3,4], 0.1],
   [[3,5], 0.1],
   [[4,6], 1.0],
   [[5,6], 1.0]],
  directed=true)$
(%i3) [flow_value, flow] : max_flow(net, 1, 6);
(%o3) [0.7, [[[1, 2], 0.5], [[1, 3], 0.2], [[2, 4], 0.2],
[[2, 5], 0.3], [[3, 4], 0.1], [[3, 5], 0.1], [[4, 6], 0.3],
[[5, 6], 0.4]]]
(%i4) fl : 0$
(%i5) for u in out_neighbors(1, net) 
         do fl : fl + assoc([1, u], flow)$
(%i6) fl;
(%o6)                                 0.7
Función: max_independent_set (gr)

Devuelve un conjunto maximal independiente de vértices del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i3) d : dodecahedron_graph()$
(%i4) mi : max_independent_set(d);
(%o4)                   [0, 3, 5, 9, 10, 11, 18, 19]
(%i5) draw_graph(d, show_vertices=mi)$

../figures/graphs05

Función: max_matching (gr)

Devuelve un conjunto maximal independiente de aristas del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) d : dodecahedron_graph()$
(%i3) m : max_matching(d);
(%o3) [[5, 7], [8, 9], [6, 10], [14, 19], [13, 18], [12, 17],
                             [11, 16], [0, 15], [3, 4], [1, 2]]
(%i4) draw_graph(d, show_edges=m)$

../figures/graphs06

Función: min_degree (gr)

Devuelve el grado mínimo de los vértices del grafo gr y un vértice de grado mínimo.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : random_graph(100, 0.1)$
(%i3) min_degree(g);
(%o3)                              [4, 21]
(%i4) vertex_degree(21, g);
(%o4)                                 4
Función: minimum_spanning_tree (gr)

Devuelve el grafo de expansión mínimo del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : graph_product(path_graph(10), path_graph(10))$
(%i3) t : minimum_spanning_tree(g)$
(%i4) draw_graph(g, show_edges=edges(t))$

../figures/graphs07

Función: neighbors (v, gr)

Devuelve la lista de los vecinos del vértice v del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) neighbors(3, p);
(%o3)                             [4, 8, 2]
Función: odd_girth (gr)

Devuelve la longitud del ciclo impar más corto del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : graph_product(cycle_graph(4), cycle_graph(7))$
(%i3) girth(g);
(%o3)                                 4
(%i4) odd_girth(g);
(%o4)                                 7
Función: out_neighbors (v, gr)

Devuelve la lista de los nodos padres del vértice v del grafo orientado gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : path_digraph(3)$
(%i3) in_neighbors(2, p);
(%o3)                                 [1]
(%i4) out_neighbors(2, p);
(%o4)                                 []
Función: planar_embedding (gr)

Devuelve la lista de caminos faciales en una proyección planar de gr, o false si gr no es un grafo planar.

El grafo gr debe estar biconectado.

El algoritmo utilizado es el de Demoucron, que es de tiempo cuadrático.

Ejemplo:

(%i1) load (graphs)$
(%i2) planar_embedding(grid_graph(3,3));
(%o2) [[6, 3, 4, 7], [3, 0, 1, 4], [5, 8, 7, 4], 
                         [2, 1, 0, 3, 6, 7, 8, 5], [4, 1, 2, 5]]
Función: print_graph (gr)

Muestra alguna información sobre el grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) c5 : cycle_graph(5)$
(%i3) print_graph(c5)$
Graph on 5 vertices with 5 edges.
Adjacencies:
  4 :  0  3
  3 :  4  2
  2 :  3  1
  1 :  2  0
  0 :  4  1
(%i4) dc5 : cycle_digraph(5)$
(%i5) print_graph(dc5)$
Digraph on 5 vertices with 5 arcs.
Adjacencies:
  4 :  0
  3 :  4
  2 :  3
  1 :  2
  0 :  1
(%i6) out_neighbors(0, dc5);
(%o6)                                [1]
Función: radius (gr)

Devuelve el radio del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) radius(dodecahedron_graph());
(%o2)                                 5
Función: set_edge_weight (e, w, gr)

Asigna el peso w a la arista e del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : create_graph([1, 2], [[[1,2], 1.2]])$
(%i3) get_edge_weight([1,2], g);
(%o3)                                1.2
(%i4) set_edge_weight([1,2], 2.1, g);
(%o4)                               done
(%i5) get_edge_weight([1,2], g);
(%o5)                                2.1
Función: set_vertex_label (v, l, gr)

Asigna la etiqueta l al vértice v del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
(%i3) get_vertex_label(1, g);
(%o3)                                One
(%i4) set_vertex_label(1, "oNE", g);
(%o4)                               done
(%i5) get_vertex_label(1, g);
(%o5)                                oNE
Función: shortest_path (u, v, gr)

Devuelve el camino más corto desde u hasta v del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) d : dodecahedron_graph()$
(%i3) path : shortest_path(0, 7, d);
(%o3)                          [0, 1, 19, 13, 7]
(%i4) draw_graph(d, show_edges=vertices_to_path(path))$

../figures/graphs08

Función: strong_components (gr)

Devuelve las componentes fuertes del grafo orientado gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) t : random_tournament(4)$
(%i3) strong_components(t);
(%o3)                         [[2, 0, 1], [3]]
(%i4) vertex_out_degree(3, t);
(%o4)                                 0
Función: topological_sort (dag)

Devuelve el orden topológico de los vértices del grafo orientado dag o una lista vacía si dag no es un grafo orientado acíclico.

Ejemplo:

(%i1) load (graphs)$
(%i2) g:create_graph(
         [1,2,3,4,5],
         [
          [1,2], [2,5], [5,3],
          [5,4], [3,4], [1,3]
         ],
         directed=true)$
(%i3) topological_sort(g);
(%o3)                           [1, 2, 5, 3, 4]
Función: vertex_degree (v, gr)

Devuelve el grado del vértice v del grafo gr.

Función: vertex_distance (u, v, gr)

Devuelve la longitud del camino más corto entre u y v del grafo o digrafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) d : dodecahedron_graph()$
(%i3) vertex_distance(0, 7, d);
(%o3)                                 4
(%i4) shortest_path(0, 7, d);
(%o4)                         [0, 1, 19, 13, 7]
Función: vertex_eccentricity (v, gr)

Devuelve la excentricidad del vértice v del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g:cycle_graph(7)$
(%i3) vertex_eccentricity(0, g);
(%o4)                                  3
Función: vertex_in_degree (v, gr)

Devuelve el grado de entrada del vértice v del grafo orientado gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p5 : path_digraph(5)$
(%i3) print_graph(p5)$
Digraph on 5 vertices with 4 arcs.
Adjacencies:
  4 :
  3 :  4
  2 :  3
  1 :  2
  0 :  1
(%i4) vertex_in_degree(4, p5);
(%o4)                                 1
(%i5) in_neighbors(4, p5);
(%o5)                                [3]
Función: vertex_out_degree (v, gr)

Devuelve el grado de salida del vértice v del grafo orientado gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) t : random_tournament(10)$
(%i3) vertex_out_degree(0, t);
(%o3)                                 3
(%i4) out_neighbors(0, t);
(%o4)                             [7, 4, 2]
Función: vertices (gr)

Devuelve la lista de vértices del grafo gr.

Example

(%i1) load (graphs)$
(%i2) vertices(complete_graph(4));
(%o2)                           [3, 2, 1, 0]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2.3 Modificación de grafos

Función: add_edge (e, gr)

Añade la arista e al grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) p : path_graph(4)$
(%i3) neighbors(0, p);
(%o3)                                [1]
(%i4) add_edge([0,3], p);
(%o4)                               done
(%i5) neighbors(0, p);
(%o5)                              [3, 1]
Función: add_edges (e_list, gr)

Añade las aristas de la lista e_list al grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : empty_graph(3)$
(%i3) add_edges([[0,1],[1,2]], g)$
(%i4) print_graph(g)$
Graph on 3 vertices with 2 edges.
Adjacencies:
  2 :  1
  1 :  2  0
  0 :  1
Función: add_vertex (v, gr)

Añade el vértice v al grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : path_graph(2)$
(%i3) add_vertex(2, g)$
(%i4) print_graph(g)$
Graph on 3 vertices with 1 edges.
Adjacencies:
  2 :
  1 :  0
  0 :  1
Función: add_vertices (v_list, gr)

Añade los vértices de la lista v_list al grafo gr.

Función: connect_vertices (v_list, u_list, gr)

Conecta todos los vértices de la lista v_list con los vértices de la lista u_list del grafo gr.

v_list y u_list pueden ser vértices aislados o una lista de vértices.

Ejemplo:

(%i1) load (graphs)$
(%i2) g : empty_graph(4)$
(%i3) connect_vertices(0, [1,2,3], g)$
(%i4) print_graph(g)$
Graph on 4 vertices with 3 edges.
Adjacencies:
  3 :  0
  2 :  0
  1 :  0
  0 :  3  2  1
Función: contract_edge (e, gr)

Contrae la arista e del gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) g: create_graph(
       8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
(%i3) print_graph(g)$
Graph on 8 vertices with 7 edges.
Adjacencies:
  7 :  4
  6 :  4
  5 :  4
  4 :  7  6  5  3
  3 :  4  2  1  0
  2 :  3
  1 :  3
  0 :  3
(%i4) contract_edge([3,4], g)$
(%i5) print_graph(g)$
Graph on 7 vertices with 6 edges.
Adjacencies:
  7 :  3
  6 :  3
  5 :  3
  3 :  5  6  7  2  1  0
  2 :  3
  1 :  3
  0 :  3
Función: remove_edge (e, gr)

Elimina la arista e del grafo gr.

Ejemplo:

(%i1) load (graphs)$
(%i2) c3 : cycle_graph(3)$
(%i3) remove_edge([0,1], c3)$
(%i4) print_graph(c3)$
Graph on 3 vertices with 2 edges.
Adjacencies:
  2 :  0  1
  1 :  2
  0 :  2
Función: remove_vertex (v, gr)

Elimina el vértice v del grafo gr.

Función: vertex_coloring (gr)

Devuelve un coloreado óptimo de los vértice del grafo gr.

La función devuelve el número cromático y una lista representando el coloreado de los vértices de g.

Ejemplo:

(%i1) load (graphs)$
(%i2) p:petersen_graph()$
(%i3) vertex_coloring(p);
(%o3) [3, [[0, 2], [1, 3], [2, 2], [3, 3], [4, 1], [5, 3], 
                                [6, 1], [7, 1], [8, 2], [9, 2]]]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2.4 Lectura y escritura de ficheros

Función: dimacs_export (gr, fl)
Función: dimacs_export (gr, fl, comment1, ..., commentn)

Exporta el grafo al fichero fl en formato DIMACS. Los comentarios adicionales se anãdirán al comienzo del fichero.

Función: dimacs_import (fl)

Lee el grafo almacenado en el fichero fl en formato DIMACS.

Función: graph6_decode (str)

Devuelve el grafo codificado en formato graph6 en la cadena str.

Función: graph6_encode (gr)

Devuelve una cadena codificando el grafo gr en formato graph6.

Función: graph6_export (gr_list, fl)

Exporta los grafos de la lista gr_list al fichero fl en formato graph6.

Función: graph6_import (fl)

Lee la lista de grafos almacenados en el fichero fl en formato graph6.

Función: sparse6_decode (str)

Devuelve el grafo codificado en formato sparse6 en la cadena str.

Función: sparse6_encode (gr)

Devuelve una cadena codificando el grafo gr en formato sparse6.

Función: sparse6_export (gr_list, fl)

Exporta los grafos de la lista gr_list al fichero fl en formato sparse6.

Función: sparse6_import (fl)

Lee la lista de grafos almacenados en el fichero fl en formato sparse6.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2.5 Visualización

Función: draw_graph (graph)
Función: draw_graph (graph, option1, ..., optionk)

Dibuja el grafo utilizando el paquete draw.

El algoritmo utilizado para posicionar los vértices se especifica con el argumento opcional program, cuyo valor por defecto es program=spring_embedding. También se pueden utilizar los programas graphviz para posicionar los vértices, para lo cual deberá instalarse separadamente el programa graphviz.

Los argumentos opcionales de la función draw_graph son:

Ejemplo 1:

(%i1) load (graphs)$
(%i2) g:grid_graph(10,10)$
(%i3) m:max_matching(g)$
(%i4) draw_graph(g,
   spring_embedding_depth=100,
   show_edges=m, edge_type=dots,
   vertex_size=0)$

../figures/graphs09

Ejemplo 2:

(%i1) load (graphs)$
(%i2) g:create_graph(16,
    [
     [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
     [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
     [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
     [10,14],[15,14],[13,14]
    ])$
(%i3) t:minimum_spanning_tree(g)$
(%i4) draw_graph(
    g,
    show_edges=edges(t),
    show_edge_width=4,
    show_edge_color=green,
    vertex_type=filled_square,
    vertex_size=2
    )$

../figures/graphs10

Ejemplo 3:

(%i1) load (graphs)$
(%i2) mi : max_independent_set(g)$
(%i3) draw_graph(
    g,
    show_vertices=mi,
    show_vertex_type=filled_up_triangle,
    show_vertex_size=2,
    edge_color=cyan,
    edge_width=3,
    show_id=true,
    text_color=brown
    )$

../figures/graphs11

Ejemplo 4:

(%i1) load (graphs)$
(%i2) net : create_graph(
    [0,1,2,3,4,5],
    [
     [[0,1], 3], [[0,2], 2],
     [[1,3], 1], [[1,4], 3],
     [[2,3], 2], [[2,4], 2],
     [[4,5], 2], [[3,5], 2]
    ],
    directed=true
    )$
(%i3) draw_graph(
    net,
    show_weight=true,
    vertex_size=0,
    show_vertices=[0,5],
    show_vertex_type=filled_square,
    head_length=0.2,
    head_angle=10,
    edge_color="dark-green",
    text_color=blue
    )$

../figures/graphs12

Variable opcional: draw_graph_program

Valor por defecto: spring_embedding.

Programa a utilizar por defecto para posicionar los vértices en la función draw_graph.

Función: vértices_to_path (v_list)

Convierte una lista de vértices en la lista de aristas del camino definido por ellos.

Función: vértices_to_cycle (v_list)

Convierte una lista de vértices en la lista de aristas del ciclo definido por ellos.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Robert Dodier on diciembre, 22 2007 using texi2html 1.76.