Section1.5Graph()
The command Graph() provides a very useful way to construct graphs. To begin, we will invoke it in the form X = Graph( [vertices, adj_pred] ). There is just one argument, a list consisting of the the vertices is the vertex set of X (itself a list), and a predicate (or function) adj_pred that takes two vertices u and v and returns True or False according as they are adjacent or not.
As a trivial example, we construct the path on 9 vertices:
xxxxxxxxxx
P9 = Graph([[0..8], lambda i,j: i-j == 1])
P9.edges(labels=False)
Here lambda is a synonym for “function”, its inputs precede the colon and the subsequent text computes its value. By using lambda, we can define our predicate inline. You should experiment to see what happens if you type = in place of ==, since you will eventually do it by accident, and it is good to be able to recognize what's gone wrong. We could have defined the predicate first:
xxxxxxxxxx
def adj_pred( i,j):
return i - j == 1
and then created our graph with
xxxxxxxxxx
P9_2 = Graph([[0..8], adj_pred])
P9_2.is_isomorphic(P9)
This illustrates that Python allows us to pass a function as an argument.
Graph() accepts a variety of arguments, including:
- A list of edges.
- A dictionary of lists.
- An adjacency matrix.
- A graph6 string.
What's a graph6 string? All we need to know is that it is a compact encoding of a graph as an ASCII string. We can produce that string encoding the graph as follows
xxxxxxxxxx
P9.graph6_string()
There are other programs (e.g., Brendan McKay's geng) that will produce files of graphs presented as graph6 strings, and so we can read these into Sage and convert them to Sage graphs.
Here is a very natural way to create a graph, by supplying a list of edges.
xxxxxxxxxx
an_edge_list = [(0,1), (1,2), (2, 3), (3, 0), (1,3)]
G = Graph(an_edge_list)
G.degree()