Walks in graphs¶
This section provides some examples on Chapter 1 of Stanley’s book [Stanley2013].
We begin by creating a graph with 4 vertices:
sage: G = Graph(4)
sage: G
Graph on 4 vertices
This graph has no edges yet:
sage: G.vertices()
[0, 1, 2, 3]
sage: G.edges()
[]
Before we can add edges, we need to tell Sage that our graph can have loops and multiple edges.:
sage: G.allow_loops(True)
sage: G.allow_multiple_edges(True)
Now we are ready to add our edges by specifying a tuple of vertices that are connected by an edge. If there are multiple edges, we need to add the tuple with multiplicity.:
sage: G.add_edges([(0,0),(0,0),(0,1),(0,3),(1,3),(1,3)])
Now let us look at the graph!
sage: G.plot()
Graphics object consisting of 11 graphics primitives

We can construct the adjacency matrix:
sage: A = G.adjacency_matrix()
sage: A
[2 1 0 1]
[1 0 0 2]
[0 0 0 0]
[1 2 0 0]
The entry in row i and column j of the ℓ-th power of A gives us the number of paths of length ℓ from vertex i to vertex j. Let us verify this:
sage: A**2
[6 4 0 4]
[4 5 0 1]
[0 0 0 0]
[4 1 0 5]
There are 4 paths of length 2 from vertex 0 to vertex 1: take either loop at 0 and then the edge (0,1) (2 choices) or take the edge (0,3) and then either of the two edges (3,1) (two choices):
sage: (A**2)[0,1]
4
To count the number of closed walks, we can also look at the sum of the ℓ-th powers of the eigenvalues. Even though the eigenvalues are not integers, we find that the sum of their squares is an integer:
sage: A.eigenvalues()
[0, -2, 0.5857864376269049?, 3.414213562373095?]
sage: sum(la**2 for la in A.eigenvalues())
16.00000000000000?
We can achieve the same by looking at the trace of the ℓ-th power of the matrix:
sage: (A**2).trace()
16