next | previous | forward | backward | up | top | index | toc | directory | Macaulay 2 web site

graph -- constructor for Graph.

Synopsis

Description

The function graph is a constructor for Graph, a type of HyperGraph. The user can input a graph in a number of different ways, which we describe below. The information describing the graph is stored in a hash table.

For the first possiblity, the user inputs a polynomial ring, which specifices the vertices of graph, and a list of the edges of the graph. The edges are represented as lists.
i1 : R = QQ[a..f]

o1 = R

o1 : PolynomialRing
i2 : E = {{a,b},{b,c},{c,f},{d,a},{e,c},{b,d}}

o2 = {{a, b}, {b, c}, {c, f}, {d, a}, {e, c}, {b, d}}

o2 : List
i3 : g = graph (R,E)

o3 = Graph{edges => {{a, b}, {b, c}, {c, f}, {d, a}, {e, c}, {b, d}}}
           ring => R
           vertices => {a, b, c, d, e, f}

o3 : Graph
Altenatively, if the polynomial ring has already been defined, it suffices to simply enter the list of the edges.
i4 : S = QQ[z_1..z_8]

o4 = S

o4 : PolynomialRing
i5 : E1 = {{z_1,z_2},{z_2,z_3},{z_3,z_4},{z_4,z_5},{z_5,z_6},{z_6,z_7},{z_7,z_8},{z_8,z_1}}

o5 = {{z , z }, {z , z }, {z , z }, {z , z }, {z , z }, {z , z }, {z , z },
        1   2     2   3     3   4     4   5     5   6     6   7     7   8  
     ------------------------------------------------------------------------
     {z , z }}
       8   1

o5 : List
i6 : E2 = {{z_1,z_3},{z_3,z_4},{z_5,z_2},{z_2,z_4},{z_7,z_8}}

o6 = {{z , z }, {z , z }, {z , z }, {z , z }, {z , z }}
        1   3     3   4     5   2     2   4     7   8

o6 : List
i7 : g1 = graph E1

o7 = Graph{edges => {{z , z }, {z , z }, {z , z }, {z , z }, {z , z }, {z , z }, {z , z }, {z , z }}}
                       1   2     2   3     3   4     4   5     5   6     6   7     1   8     7   8
           ring => S
           vertices => {z , z , z , z , z , z , z , z }
                         1   2   3   4   5   6   7   8

o7 : Graph
i8 : g2 = graph E2

o8 = Graph{edges => {{z , z }, {z , z }, {z , z }, {z , z }, {z , z }}}
                       1   3     2   4     3   4     2   5     7   8
           ring => S
           vertices => {z , z , z , z , z , z , z , z }
                         1   2   3   4   5   6   7   8

o8 : Graph
The list of edges could also be entered as a list of square-free quadratic monomials.
i9 : T = QQ[w,x,y,z]

o9 = T

o9 : PolynomialRing
i10 : e = {w*x,w*y,w*z,x*y,x*z,y*z}

o10 = {w*x, w*y, w*z, x*y, x*z, y*z}

o10 : List
i11 : g = graph e

o11 = Graph{edges => {{w, x}, {w, y}, {x, y}, {w, z}, {x, z}, {y, z}}}
            ring => T
            vertices => {w, x, y, z}

o11 : Graph
Another option for defining an graph is to use an ideal or monomialIdeal.
i12 : C = QQ[p_1..p_6]

o12 = C

o12 : PolynomialRing
i13 : i = monomialIdeal (p_1*p_2,p_2*p_3,p_3*p_4,p_3*p_5,p_3*p_6)

o13 = monomialIdeal (p p , p p , p p , p p , p p )
                      1 2   2 3   3 4   3 5   3 6

o13 : MonomialIdeal of C
i14 : graph i

o14 = Graph{edges => {{p , p }, {p , p }, {p , p }, {p , p }, {p , p }}}
                        1   2     2   3     3   4     3   5     3   6
            ring => C
            vertices => {p , p , p , p , p , p }
                          1   2   3   4   5   6

o14 : Graph
i15 : j = ideal (p_1*p_2,p_1*p_3,p_1*p_4,p_1*p_5,p_1*p_6)

o15 = ideal (p p , p p , p p , p p , p p )
              1 2   1 3   1 4   1 5   1 6

o15 : Ideal of C
i16 : graph j

o16 = Graph{edges => {{p , p }, {p , p }, {p , p }, {p , p }, {p , p }}}
                        1   2     1   3     1   4     1   5     1   6
            ring => C
            vertices => {p , p , p , p , p , p }
                          1   2   3   4   5   6

o16 : Graph
If a hypergraph has been defined that is also a graph, one can change the type of the hypergraph into a graph.
i17 : D = QQ[r_1..r_5]

o17 = D

o17 : PolynomialRing
i18 : h = hyperGraph {r_1*r_2,r_2*r_4,r_3*r_5,r_5*r_4,r_1*r_5}

o18 = HyperGraph{edges => {{r , r }, {r , r }, {r , r }, {r , r }, {r , r }}}
                             1   2     2   4     1   5     3   5     4   5
                 ring => D
                 vertices => {r , r , r , r , r }
                               1   2   3   4   5

o18 : HyperGraph
i19 : g = graph h

o19 = Graph{edges => {{r , r }, {r , r }, {r , r }, {r , r }, {r , r }}}
                        1   2     2   4     1   5     3   5     4   5
            ring => D
            vertices => {r , r , r , r , r }
                          1   2   3   4   5

o19 : Graph
Some special care is needed it construct the empty graph, that is, the graph with no edges. In this case, the input cannot be a list (since the constructor does not know which ring to use). To define the empty graph, use a polynomial ring and (monomial) ideal.
i20 : E = QQ[m,n,o,p]

o20 = E

o20 : PolynomialRing
i21 : i = monomialIdeal(0_E)  -- the zero element of E (do not use 0)

o21 = 0

o21 : MonomialIdeal of E
i22 : graph i

o22 = Graph{edges => {}             }
            ring => E
            vertices => {m, n, o, p}

o22 : Graph
i23 : j = ideal (0_E)

o23 = ideal 0

o23 : Ideal of E
i24 : graph j

o24 = Graph{edges => {}             }
            ring => E
            vertices => {m, n, o, p}

o24 : Graph

See also

Ways to use graph :