Maxima Manual: Функции и переменные пакета graphs

Previous: Введение в пакет graphs, Up: Пакет graphs [Contents][Index]

### 50.2 Функции и переменные пакета graphs

#### 50.2.1 Построение графов

Функция: create_graph (v_list, e_list)
Функция: create_graph (n, e_list)
Функция: create_graph (v_list, e_list, directed)

  Создает новый граф с множеством вершин v_list и ребрами e_list.

  v_list – список вершин (`[v1, v2,..., vn]`) или вершин вместе с метками (`[[v1,l1], [v2,l2],..., [vn,ln]]`).

  Если n – число вершин, то они будут обозначаться целыми числами от 0 до n-1.

  e_list – список ребер вида (`[e1, e2,..., em]`) или список ребер вместе с весами (`[[e1, w1], ..., [em, wm]]`).

  Если directed отлично от `false`, то возвращается ориентированный граф.

  Пример 1: цикл с тремя вершинами:

      (%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

  Пример 2: цикл с тремя вершинами и весами ребер:

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

  Пример 3: ориентированный граф:

      (%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

Функция: copy_graph (g)

  Возвращает копию графа g.

Функция: circulant_graph (n, d)

  Возвращает циркулянтный граф граф с параметрами n и d.

  Пример:

      (%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

Функция: clebsch_graph ()

  Возвращает граф Клебша (Clebsch graph).

Функция: complement_graph (g)

  Возвращает граф, дополнительный графу g.

Функция: complete_bipartite_graph (n, m)

  Возвращает полный двудольный граф с n+m вершинами.

Функция: complete_graph (n)

  Возвращает полный граф с n вершинами.

Функция: cycle_digraph (n)

  Возвращает ориентированный циклический граф с n вершинами.

Функция: cycle_graph (n)

  Возвращает циклический граф с n вершинами.

Функция: cube_graph (n)

  Возвращает n-мерный куб.

Функция: dodecahedron_graph ()

  Возвращает граф додекаэдра.

Функция: empty_graph (n)

  Возвращает пустой граф с n вершинами.

Функция: flower_snark (n)

  Возвращает цветочный граф (flower graph) с 4n вершинами.

  Пример:

      (%i1) load ("graphs")$
      (%i2) f5 : flower_snark(5)$
      (%i3) chromatic_index(f5);
      (%o3)                           4

Функция: from_adjacency_matrix (A)

  Возвращает граф с матрицей смежности A.

Функция: frucht_graph ()

  Возвращает граф Фручта (Frucht graph).

Функция: graph_product (g1, g1)

  Возвращает прямое произведение графов g1 и g2.

  Пример:

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

Функция: graph_union (g1, g1)

  Возвращает объединение (сумму) графов g1 и g2.

Функция: grid_graph (n, m)

  Возвращает решетку n x m.

Функция: grotzch_graph ()

  Возвращает граф Гротча (Grotzch graph).

Функция: heawood_graph ()

  Возвращает граф Хейвуда (Heawood graph).

Функция: icosahedron_graph ()

  Возвращает граф икосаэдра.

Функция: induced_subgraph (V, g)

  Возвращает граф, состоящий из подмножества вершин V графа g.

  Пример:

      (%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

Функция: line_graph (g)

  Возвращает граф двойственный (line graph) графу g.

Функция: make_graph (vrt, f)
Функция: make_graph (vrt, f, oriented)

  Создает граф, используя функцию предикат f.

  vrt – есть список/множество вкршин или целое число. Если vrt есть целое число, то вершины графа будут целыми от 1 до vrt.

  f – функция предикат. Вершины a и b будут соединены, если `f(a,b)=true`.

  Если directed не равно false, то граф будет ориентированным.

  Пример 1:

      (%i1) load("graphs")$
      (%i2) g : make_graph(powerset({1,2,3,4,5}, 2), disjointp)$
      (%i3) is_isomorphic(g, petersen_graph());
      (%o3)                         true
      (%i4) get_vertex_label(1, g);
      (%o4)                        {1, 2}

  Пример 2:

      (%i1) load("graphs")$
      (%i2) f(i, j) := is (mod(j, i)=0)$
      (%i3) g : make_graph(20, f, directed=true)$
      (%i4) out_neighbors(4, g);
      (%o4)                    [8, 12, 16, 20]
      (%i5) in_neighbors(18, g);
      (%o5)                    [1, 2, 3, 6, 9]

Функция: mycielski_graph (g)

  Возвращает граф Мицельского (mycielskian graph) графа g.

Функция: new_graph ()

  Возвращает граф без вершин и ребер.

Функция: path_digraph (n)

  Возвращает ориентированный путь с n вершинами.

Функция: path_graph (n)

  Возвращает путь с n вершинами.

Функция: petersen_graph ()
Функция: petersen_graph (n, d)

  Возвращает граф Петерсена P_{n,d}. Значения по умолчанию для n и d есть `n=5` и `d=2`.

Функция: random_bipartite_graph (a, b, p)

  Возвращает случайный двудольный граф с `a+b` вершинами. Каждая вершина присутствует с вероятностью p.

Функция: random_digraph (n, p)

  Возвращает случайный ориентированный граф с n вершинами. Каждое ребро присутствует с вероятностью p.

Функция: random_regular_graph (n)
Функция: random_regular_graph (n, d)

  Возвращает случайный d-регулярный граф с n вершинами. Значение по умолчанию для d есть `d=3`.

Функция: random_graph (n, p)

  Возвращает случайный граф с n вершинами. Каждое ребро присутствует с вероятностью p.

Функция: random_graph1 (n, m)

  Возвращает случайный граф с n вершинами и m случайными ребрами.

Функция: random_network (n, p, w)

  Возвращает случайную сеть на n вершинах. Каждое ребро присутствует с вероятностью p и имеет вес в интервале `[0,w]`. Эта функция возвращает список `[network, source, sink]`.

  Пример:

      (%i1) load ("graphs")$
      (%i2) [net, s, t] : random_network(50, 0.2, 10.0);
      (%o2)                   [DIGRAPH, 50, 51]
      (%i3) max_flow(net, s, t)$
      (%i4) first(%);
      (%o4)                   27.65981397932507

Функция: random_tournament (n)

  Возвращает случайный полный ориентированный граф (tournament) с n вершинами.

Функция: random_tree (n)

  Возвращает случайное дерево с n вершинами.

Функция: tutte_graph ()

  Возвращает граф Татта (Tutte).

Функция: underlying_graph (g)

  Возвращает неориентированный граф, получаемый заменой ребер ориентированного графа g на неориентированные.

Функция: wheel_graph (n)

  Возвращает колесный граф (wheel graph) с n+1 вершинами.

#### 50.2.2 Свойства графов

Функция: adjacency_matrix (gr)

  Возвращает матрицу смежности графа gr.

  Пример:

      (%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 ]

Функция: average_degree (gr)

  Возвращает среднюю степень вершин графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) average_degree(grotzch_graph());
                                     40
      (%o2)                          --
                                     11

Функция: biconected_components (gr)

  Возвращает (наборы вершин) 2-связных компонент графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) 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]
                  ])$
      (%i3) biconnected_components(g);
      (%o3)        [[6, 7], [4, 5, 6], [1, 2], [2, 3, 4]]

Функция: bipartition (gr)

  Возвращает двудольное разложение графа gr или пустой список, если gr не является двудольным.

  Пример:

      (%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)$

Функция: chromatic_index (gr)

  Возвращает хроматический индекс графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) p : petersen_graph()$
      (%i3) chromatic_index(p);
      (%o3)                           4

Функция: chromatic_number (gr)

  Возвращает хроматическое число графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) chromatic_number(cycle_graph(5));
      (%o2)                           3
      (%i3) chromatic_number(cycle_graph(6));
      (%o3)                           2

Функция: clear_edge_weight (e, gr)

  Удаляет вес ребра e в графе gr.

  Пример:

      (%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

Функция: clear_vertex_label (v, gr)

  Удаляет метку вершины v в графе gr.

  Пример:

      (%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

Функция: connected_components (gr)

  Возвращает (наборы вершин) компоненты связности графа gr.

  Пример:

      (%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]]

Функция: diameter (gr)

  Возвращает диаметр графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) diameter(dodecahedron_graph());
      (%o2)                          5

Функция: edge_coloring (gr)

  Возвращает оптимальную раскраску ребер графа gr.

  Эта функция возвращает хроматический индекс и список, представляющий раскраску ребер графа gr.

  Пример:

      (%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

Функция: degree_sequence (gr)

  Возвращает список степеней вершин графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) degree_sequence(random_graph(10, 0.4));
      (%o2)            [3, 3, 3, 4, 4, 4, 5, 5, 6, 7]

Функция: edges (gr)

  Возвращает список ребер/дуг ориентированного или неориентированного графа gr.

  Пример:

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

Функция: get_edge_weight (e, gr)
Функция: get_edge_weight (e, gr, ifnot)

  Возвращает вес ребра e графа gr.

  Если вес не присвоен ребру, то возвращается 1. Если ребро в графе отсутствует, то выдается ошибка или возвращает необязательный аргумент ifnot.

  Пример:

      (%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

Функция: get_vertex_label (v, gr)

  Возвращает метку вершины v графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
      (%i3) get_vertex_label(0, g);
      (%o3)                         Zero

Функция: graph_charpoly (gr, x)

  Возвращает характеристический многочлен (от переменной x) графа gr.

  Пример:

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

Функция: graph_center (gr)

  Возвращает центр графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : grid_graph(5,5)$
      (%i3) graph_center(g);
      (%o3)                         [12]

Функция: graph_eigenvalues (gr)

  Возвращает собственные значения графа gr. Значение возвращаются в том же формате, что возвращает Maxima функция `eigenvalue`.

  Пример:

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

Функция: graph_periphery (gr)

  Возвращает периферию графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : grid_graph(5,5)$
      (%i3) graph_periphery(g);
      (%o3)                    [24, 20, 4, 0]

Функция: graph_size (gr)

  Возвращает число вершин в графе gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) p : petersen_graph()$
      (%i3) graph_size(p);
      (%o3)                          10

Функция: graph_order (gr)

  Возвращает число ребер в графе gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) p : petersen_graph()$
      (%i3) graph_order(p);
      (%o3)                          15

Функция: girth (gr)

  Возвращает длину наикратчайшего цикла в графе gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : heawood_graph()$
      (%i3) girth(g);
      (%o3)                           5

Функция: hamilton_cycle (gr)

  Возвращает гамильтонов цикл графа gr или пустой список, если граф gr не является гамильтоновым.

  Пример:

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

Функция: hamilton_path (gr)

  Возвращает гамильтонов путь графа gr или пустой список, если граф gr не имеет гамильтонова пути.

  Пример:

      (%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))$

Функция: isomorphism (gr1, gr2)

  Возвращает хэш-таблицу изоморфизма между (ориентированными) графами gr1 и gr2. Если gr1 и gr2 не изоморфны, то возвращается `false`.

  Пример:

      (%i1) load ("graphs")$
      (%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
      (%i3) hash_table_data(isomorphism(clk5, petersen_graph()));
      (%o3) [8 -> 9, 7 -> 8, 4 -> 7, 3 -> 6, 1 -> 5, 0 -> 4, 5 -> 3,
                                                6 -> 2, 2 -> 1, 9 -> 0]

Функция: in_neighbors (v, gr)

  Возвращает список входящих соседей (in-neighbors) вершины v ориентированного графа gr.

  Пример:

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

Функция: is_biconnected (gr)

  Возвращает `true`, если граф gr 2-связный, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_biconnected(cycle_graph(5));
      (%o2)                         true
      (%i3) is_biconnected(path_graph(5));
      (%o3)                         false

Функция: is_bipartite (gr)

  Возвращает `true`, если граф gr двудольный, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_bipartite(petersen_graph());
      (%o2)                        false
      (%i3) is_bipartite(heawood_graph());
      (%o3)                        true

Функция: is_connected (gr)

  Возвращает `true`, если граф gr связный, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_connected(graph_union(cycle_graph(4), path_graph(3)));
      (%o2)                        false

Функция: is_digraph (gr)

  Возвращает `true`, если gr является ориентированным графом, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_digraph(path_graph(5));
      (%o2)                        false
      (%i3) is_digraph(path_digraph(5));
      (%o3)                        true

Функция: is_edge_in_graph (e, gr)

  Возвращает `true`, если e есть ребро (ориентированного) графа g, и `false` в противном случае.

  Пример:

      (%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

Функция: is_graph (gr)

  Возвращает `true`, если gr является графом, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_graph(path_graph(5));
      (%o2)                        true
      (%i3) is_graph(path_digraph(5));
      (%o3)                        false

Функция: is_graph_or_digraph (gr)

  Возвращает `true`, если gr является графом или ориентированным графом, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_graph_or_digraph(path_graph(5));
      (%o2)                        true
      (%i3) is_graph_or_digraph(path_digraph(5));
      (%o3)                        true

Функция: is_isomorphic (gr1, gr2)

  Возвращает `true`, если (ориентированные) графы gr1 и gr2 изоморфны, и `false` в противном случае.

  См. также `isomorphism`.

  Пример:

      (%i1) load ("graphs")$
      (%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
      (%i3) is_isomorphic(clk5, petersen_graph());
      (%o3)                       true

Функция: is_planar (gr)

  Возвращает `true`, если gr является планарным графом, и `false` в противном случае.

  Используется алгоритм Демукрона, который является квадратичным по времени.

  Пример:

      (%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

Функция: is_sconnected (gr)

  Возвращает `true`, если ориентированный граф gr является сильно связным, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_sconnected(cycle_digraph(5));
      (%o2)                        true
      (%i3) is_sconnected(path_digraph(5));
      (%o3)                        false

Функция: is_vertex_in_graph (v, gr)

  Возвращает `true`, если v есть вершина в графе g, и `false` в противном случае.

  Пример:

      (%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

Функция: is_tree (gr)

  Возвращает `true`, если граф gr является деревом, и `false` в противном случае.

  Пример:

      (%i1) load ("graphs")$
      (%i2) is_tree(random_tree(4));
      (%o2)                        true
      (%i3) is_tree(graph_union(random_tree(4), random_tree(5)));
      (%o3)                        false

Функция: laplacian_matrix (gr)

  Возвращает матрицу Лапласа графа gr.

  Пример:

      (%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  ]

Функция: max_clique (gr)

  Возвращает максимальную клику графа gr.

  Пример:

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

Функция: max_degree (gr)

  Возвращает максимальную степень вершины графа gr и саму вершину с максимальной степенью.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : random_graph(100, 0.02)$
      (%i3) max_degree(g);
      (%o3)                        [6, 70]
      (%i4) vertex_degree(95, g);
      (%o4)                           3

Функция: max_flow (net, s, t)

  Возвращает максимальный поток через сеть net с истоком s и стоком t.

  Функция возвращает значение максимального потока и список весов ребер оптимального потока.

  Пример:

      (%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

Функция: max_independent_set (gr)

  Возвращает максимальное независимое множество графа gr.

  Пример:

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

Функция: max_matching (gr)

  Возвращает максимальный набор ребер, не имеющих общих вершин (maximal matching), для графа gr.

  Пример:

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

Функция: min_degree (gr)

  Возвращает минимальную степень вершины графа gr и саму вершину с минимальной степенью.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : random_graph(100, 0.1)$
      (%i3) min_degree(g);
      (%o3)                        [4, 83]
      (%i4) vertex_degree(21, g);
      (%o4)                          12

Функция: min_vertex_cover (gr)

  Возвращает минимальное вершинное покрытие графа gr.

Функция: minimum_spanning_tree (gr)

  Возвращает минимальный каркас (минимальное остовное дерево) графа gr.

  Пример:

      (%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))$

Функция: neighbors (v, gr)

  Возвращает список соседей вершины v в графе gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) p : petersen_graph()$
      (%i3) neighbors(3, p);
      (%o3)                       [4, 8, 2]

Функция: odd_girth (gr)

  Возвращает длину наикратчайшего нечетного цикла в графе gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g : graph_product(cycle_graph(4), cycle_graph(7))$
      (%i3) girth(g);
      (%o3)                           4
      (%i4) odd_girth(g);
      (%o4)                           7

Функция: out_neighbors (v, gr)

  Возвращает список исходящих соседей (out-neighbors) вершины v ориентированного графа gr.

  Пример:

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

Функция: planar_embedding (gr)

  Возвращает список поверхностных маршрутов (facial walks) в плоской укладке графа gr, и `false`, если граф gr не является планарным.

  Граф gr должен быть бисвязным.

  Используется алгоритм Демукрона, который является квадратичным по времени.

  Пример:

      (%i1) load ("graphs")$
      (%i2) planar_embedding(grid_graph(3,3));
      (%o2) [[3, 6, 7, 8, 5, 2, 1, 0], [4, 3, 0, 1], [3, 4, 7, 6],
                                            [8, 7, 4, 5], [1, 2, 5, 4]]

Функция: print_graph (gr)

  Выводит некоторую информацию о графе gr.

  Пример:

      (%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]

Функция: radius (gr)

  Возвращает радиус графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) radius(dodecahedron_graph());
      (%o2)                           5

Функция: set_edge_weight (e, w, gr)

  Присваивает вес w ребру e графа gr.

  Пример:

      (%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

Функция: set_vertex_label (v, l, gr)

  Присваивает метку l вершине v графа gr.

  Пример:

      (%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

Функция: shortest_path (u, v, gr)

  Возвращает кратчайший путь из вершины u в вершину v в графе gr.

  Пример:

      (%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))$

Функция: strong_components (gr)

  Возвращает сильную компоненту ориентированного графа gr.

  Пример:

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

Функция: topological_sort (dag)

  Возвращает топологическую сортировку вершин ориентированного графа dag, или пустой список, если dag не является ориентированным ациклическим графом.

  Пример:

      (%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]

Функция: vertex_degree (v, gr)

  Возвращает степень вершины v в графе gr.

Функция: vertex_distance (u, v, gr)

  Возвращает длину кратчайшего пути между вершинами u и v в (ориентированном) графе gr.

  Пример:

      (%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]

Функция: vertex_eccentricity (v, gr)

  Возвращает эксцентриситет вершины v графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) g:cycle_graph(7)$
      (%i3) vertex_eccentricity(0, g);
      (%o4)                            3

Функция: vertex_in_degree (v, gr)

  Возвращает входящую степень вершины v ориентированного графа gr.

  Пример:

      (%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]

Функция: vertex_out_degree (v, gr)

  Возвращает исходящую степень вершины v ориентированного графа gr.

  Пример:

      (%i1) load ("graphs")$
      (%i2) t : random_tournament(10)$
      (%i3) vertex_out_degree(0, t);
      (%o3)                           6
      (%i4) out_neighbors(0, t);
      (%o4)                  [9, 6, 4, 3, 2, 1]

Функция: vertices (gr)

  Возвращает список вершин графа gr.

  Пример:

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

#### 50.2.3 Изменение графов

Функция: add_edge (e, gr)

  Добавляет ребро e к графу gr.

  Пример:

      (%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]

Функция: add_edges (e_list, gr)

  Добавляет ребра из списка e_list к графу gr.

  Пример:

      (%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

Функция: add_vertex (v, gr)

  Добавляет вершину v к графу gr.

  Пример:

      (%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

Функция: add_vertices (v_list, gr)

  Добавляет все вершины из списка v_list к графу gr.

Функция: connect_vertices (v_list, u_list, gr)

  Соединяет все вершины из списка v_list с вершинами из списка u_list в графе gr.

  v_list и u_list могут быть отдельными вершинами или списками вершин.

  Пример:

      (%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

Функция: contract_edge (e, gr)

  Стягивает ребро e в графе gr.

  Пример:

      (%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

Функция: remove_edge (e, gr)

  Удаляет ребро e из графа gr.

  Пример:

      (%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

Функция: remove_vertex (v, gr)

  Удаляет вершину v из графа gr.

Функция: vertex_coloring (gr)

  Возвращает оптимальную раскраску вершин графа gr.

  Функция возвращает хроматическое число и список, описывающий раскраску вершин графа g.

  Пример:

      (%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]]]

#### 50.2.4 Чтение и запись файлов

Функция: dimacs_export (gr, fl)
Функция: dimacs_export (gr, fl, comment1, ..., commentn)

  Экспортирует граф в файл fl в формате DIMACS. Необязательный комментарий будет добавлен к началу файла.

Функция: dimacs_import (fl)

  Возвращает граф из файла fl, в котором он записан в формате DIMACS.

Функция: graph6_decode (str)

  Возвращает граф, закодированный в формате graph6 в строке str.

Функция: graph6_encode (gr)

  Возвращает строку – закодированное представление графа gr в формате graph6.

Функция: graph6_export (gr_list, fl)

  Экспортирует графы из списка gr_list в файл fl в формате graph6.

Функция: graph6_import (fl)

  Возвращает список графов из файла fl, где они закодированы в формате graph6.

Функция: sparse6_decode (str)

  Возвращает граф, закодированный в формате sparse6 в строке str.

Функция: sparse6_encode (gr)

  Возвращает строку – закодированное представление графа gr в формате sparse6.

Функция: sparse6_export (gr_list, fl)

  Экспортирует графы из списка gr_list в файл fl в формате sparse6.

Функция: sparse6_import (fl)

  Возвращает список графов из файла fl, где они закодированы в формате sparse6.

#### 50.2.5 Визуализация

Функция: draw_graph (graph)
Функция: draw_graph (graph, option1, ..., optionk)

  Изображает граф с помощью пакета `draw`.

  Алгоритм, используемый для размещения вершин, определяется необязательной переменной program. Значение по умолчанию `program=spring_embedding`. Может также использоваться программа graphviz, но она должна быть установлена отдельно.

  Необязательные аргументы draw_graph могут быть:

  - show_id=show: если show равно true, то изображаются идентификаторы (id) вершин.
  - show_label=show: если show равно true, то изображаются метки вершин.
  - label_alignment=pos: как разместить метку или идентификатор вершины. Может быть `left`, `center` или `right`. По умолчанию `left`.
  - show_weight=show: если show равно true, то изображаются веса ребер.
  - vertex_type=type: определяет, как изображаются вершины. См. опцию point_type пакета `draw`.
  - vertex_size=size: размер вершин.
  - vertex_color=c: цвет вершин.
  - show_vertices=v_list: изобразить вершины из списка v_list другим цветом.
  - show_vertex_type=type: определяет, как изображаются вершины из списка show_vertices. См. опцию point_type пакета `draw`.
  - show_vertex_size=size: размер вершин в списке show_vertices.
  - show_vertex_color=c: цвет вершин в списке show_vertices.
  - vertex_partition=part: разбиение `[[v1,v2,...],...,[vk,...,vn]]` вершин графа. Вершины в каждом списка будут изображаться разными цветами.
  - vertex_coloring=col: раскраска вершин. Раскраска col должна быть задана в формате, возвращаемом vertex_coloring.
  - edge_color=c: цвет, используемый для изображения ребер.
  - edge_width=width: толщина ребер.
  - edge_type=type: определяет способ изображения ребер. См. опцию line_type пакета `draw`.
  - show_edges=e_list: изображать ребра из списка e_list другим цветом.
  - show_edge_color=c: цвет, используемый для изображения ребер из списка show_edges.
  - show_edge_width=width: ширина ребер show_edges.
  - show_edge_type=type: определяет, как изображаются ребра из списка show_edges. См. опцию line_type пакета `draw`.
  - edge_partition=partition: разбиение `[[e1,e2,...],...,[ek,...,em]]` ребер графа. Ребра в каждом списке будут изображаться разными цветами.
  - edge_coloring=col: раскраска ребер. Раскраска col должна быть задана в формате, возвращаемом функцией edge_coloring.
  - redraw=r: если redraw равно `true`, то положение вершин вычисляется снова, даже если оно было сохранено с предыдущего изображения графа.
  - head_angle=angle: угол наконечников стрелок, изображаемых на ребрах ориентированных графов. Значение по умолчанию: 15.
  - head_length=len: длина наконечников стрелок, изображаемых на ребрах ориентированных графов. Значение по умолчанию: 0.1.
  - spring_embedding_depth=depth: число итераций в алгоритме пружин (метод взаимодействия сил). Значение по умолчанию: 50.
  - terminal=term: терминал, используемый для изображения (см. опцию terminal пакета `draw`).
  - file_name=file: имя файла изображения, если терминал не является дисплеем.
  - program=prg: определяет программу, используемую для расположения вершин графа. Может быть одной из опций программы graphviz (dot, neato, twopi, circ, fdp), circular, spring_embedding или planar_embedding. planar_embedding примеменимо только 2-связным планарным графам. Когда `program=spring_embedding`, то набор вершин с фиксированным расположением может быть задан с помощью опции fixed_vertices.
  - fixed_vertices=[]: задает список вершин, которые будут расположены в фиксорованных позициях по правильному многограннику. Может использоваться совместно с `program=spring_embedding`.

  Пример 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)$

  Пример 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
          )$

  Пример 3:

      (%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) mi : max_independent_set(g)$
      (%i4) 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
          )$

  Пример 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
          )$

Управляющая переменная: draw_graph_program

  Значение по умолчанию: spring_embedding.

  Значение по умолчанию, которое используется для расположения вершин в программе `draw_graph`.

Функция: vertices_to_path (v_list)

  Преобразует список вершин v_list в список ребер пути, определяемого списком v_list.

Функция: vertices_to_cycle (v_list)

  Преобразует список вершин v_list в список ребер цикла, определяемого списком v_list.

Previous: Введение в пакет graphs, Up: Пакет graphs [Contents][Index]