Two explicit algorithms are given to quickly list all the spanning trees in an undirected graph. The main idea is to list the spanning trees in such a way that each tree output differs from the previous one only by the exchange of two edges in a fundamental cycle. The challenge is to achieve this without repetition of spanning trees and as efficiently as possible.
Most of the paper is spent on a careful description of the algorithm and data structures necessary to achieve this aim. The algorithms are described well and concretely, right down to pseudocode at certain stages. The two algorithms given are asymptotically the fastest known, running in time O ( N + V + E ) (where N is the number of spanning trees) but require differing amounts of space.
A final section indicates how the algorithms can be modified for a weighted graph to output the spanning trees in order of increasing weight.
Overall, the paper is well written and will be useful for people seeking to implement such algorithms.